PDA

View Full Version : حرفه ای: ارتباط مجدد یک کلاینت از طریق سوکت با سرور



pluschild
دوشنبه 23 تیر 1393, 10:00 صبح
با سلام و خسته نباشید خدمت اساتید

من یه برنامه کلاینت سروری نوشتم که کلاینت ا طریق سوکت یه متنی رو به سرور میفرسته و سرور بر اساس اون متن یه کاری رو انجام میده . برنامه اوکیه و بدون هیچ مشکلی کار میکنه تا زمانیکه کلاینت از برنامه خارج میشه . وقتی خارج شد و دوباره برنامه رو باز میکنه ، ارتباط انگار برقراره ولی هیچی بینشون رد و بدل نمیشه . میشه راهنمایی بفرمایید چکار باید بکنم ؟

توی ایونت فرم کلوز کلاینت سوکت رو شات دان هم کردم اما درست نمیشه . این ماجرای استخر سوکت و اینا چیه که بتونم مشکلم رو حل کنم ؟؟

این هم قسمت های حساس کد سمت سرور :


Socket ServerSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Socket ClientSock = null;
try
{
IPEndPoint ServerIEP = new IPEndPoint(IPAddress.Any, 30550);
ServerSock.Bind(ServerIEP);
ServerSock.Listen(10);
ClientSock = ServerSock.Accept();
Thread Tr = new Thread(new ThreadStart(GetOperation));
Tr.Start();
}
catch
{
;
}
private void GetOperation()
{
try
{
while (true)
{
byte[] OpBuffer = new byte[1024];
int RecBytes = ClientSock.Receive(OpBuffer);
if (RecBytes > 0)
{
Operation = Encoding.Unicode.GetString(OpBuffer, 0, RecBytes);
Thread Tr = new Thread(new ThreadStart(DoOperation));
Tr.Start();
}
}
}
catch
{
;
}
}



و این هم قسمت های حساس کد سمت کلاینت :



Socket ClientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
IPEndPoint Serveriep = new IPEndPoint(IPAddress.Parse("192.168.10.30"), 30550);
ClientSock.Connect(Serveriep);
Thread Tr = new Thread(new ThreadStart(GetAck));
Tr.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
}
private void SendOperation()
{
try
{
byte[] OpBuffer = new byte[1024];
OpBuffer = Encoding.Unicode.GetBytes(textBox1.Text);
ClientSock.Send(OpBuffer);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void GetAck()
{
try
{
while (true)
{
byte[] AckBuffer = new byte[1024];
int RecBytes = ClientSock.Receive(AckBuffer);
if (RecBytes > 0)
{
MessageBox.Show(Encoding.Unicode.GetString(AckBuff er, 0, RecBytes));
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
ClientSock.Shutdown(SocketShutdown.Both);
Environment.Exit(Environment.ExitCode);
}


ممنون میشم اگه کمک ام کنید .

omid nasri
دوشنبه 23 تیر 1393, 10:28 صبح
این ماجرای استخر و شنا و حمام مربوط میشه به این که شما بیای یک لیست بسازی و در حالت اول لیست خالی هستش، شما به ازای هر کلایت کا ارتباط برقرار می کند یک سوکت رو به لیست اضافه می کنی و با این اساس شما لیستی از سوکت رو در اختیار داری که می تونی add کنی و remove .....ظاهریت کلی اینه

pluschild
دوشنبه 23 تیر 1393, 10:36 صبح
این ماجرای استخر و شنا و حمام مربوط میشه به این که شما بیای یک لیست بسازی و در حالت اول لیست خالی هستش، شما به ازای هر کلایت کا ارتباط برقرار می کند یک سوکت رو به لیست اضافه می کنی و با این اساس شما لیستی از سوکت رو در اختیار داری که می تونی add کنی و remove .....ظاهریت کلی اینه


می تونین یه نمونه کد یا لینک یا توضیح بیشتری بهم بدین ؟

pluschild
دوشنبه 23 تیر 1393, 11:32 صبح
دوستای گل منتظرم