برنامه نویسی چت ومشکل آن
سلام دوستان
بنده این برنامه سرویس دهنده وسرویس گیرنده رونوشتم که SERVER فقط میتونه متن های CLIENT رودریافت کنه وبعددوباره پس بزنه؟ ولی نمیدونم چرابرنامه رواجرامیکنم بامشکل مواجه میشم ؟ممنون میشم منو دراین زمینه راهنمایی بفرمایید؟
برنامه واسکرین شات: client
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; namespace server { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void textBox1_TextChanged(object sender, EventArgs e) { int recv; byte[] data = new byte[2048]; IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050); Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); newsock.Bind(ipep); newsock.Listen(10); MessageBox.Show("Waiting for a client..."); Socket client = newsock.Accept(); IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint; ResultTextBox.Text += string.Format("Connected with {0} at port {1}", clientep.Address, clientep.Port); string welcome = "Welcome to my test server"; data = Encoding.ASCII.GetBytes(welcome); client.Send(data, data.Length, SocketFlags.None); while (true) { data = new byte[1024]; recv = client.Receive(data); if (recv == 0) break; ResultTextBox.Text += string.Format(Encoding.ASCII.GetString(data, 0, recv)); client.Send(data, recv, SocketFlags.None); } ResultTextBox.Text += string.Format("Disconnected from{0}", clientep.Address); client.Close(); newsock.Close(); } } }
برنامه واسکرین شات Client:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; namespace client { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { byte[] data = new byte[2048]; string input, stringData; IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { server.Connect(ipep); } catch (SocketException) { MessageBox.Show("Unable to connect to server."); } int recv = server.Receive(data); stringData = Encoding.ASCII.GetString(data, 0, recv); System.Windows.Forms.MessageBox.Show(stringData); while (true) { input = textBox1.Text; if (input == "exit") break; server.Send(Encoding.ASCII.GetBytes(input)); data = new byte[1024]; recv = server.Receive(data); stringData = Encoding.ASCII.GetString(data, 0, recv); System.Windows.Forms.MessageBox.Show(stringData); } MessageBox.Show("Disconnecting from server..."); server.Shutdown(SocketShutdown.Both); server.Close(); } } }
وقتی هم برنامه SERVER وهم Client روباهم اجرا میکنم ومیخام ازClient متنی روبرای SERVER ارسال کنم با خطای زیر مواجه میشم ؟
1 پاسخ
خب مشکل اینکه شما هنوز ارتباطتون با سرور برقرار نشده... دلیلش هم اینکه شما مشخصات سرور و bind شدن آنرا درون textbox قرار داده اید که این اشتباست و تا زمانی که اطلاعاتی وارد textbox نشود اتصال برقرار نمی شود...
شما باید این کدها رو درون یک متد قرار دهید و در form load صدا بزنید یعنی موقعی که فرم اجرا شد اتصال سرور هم برقرار شود..
در مرحله بعد پیشنهاد می کنم که از thread برای سرور استفاده کنید...
چرا که مشخص نیست چه زمانی client برای server اطلاعات ارسال می کند و فرم منتظر دریافت اطلاعات می مانند که اینهم یه مشکله... و نیاز به مبحث thread دارید.