C# 关于Socket 多线程的Server端 Client端的收发数据
我最近有玩Socket 的多线程的问题
但我的程序逻辑有些问题,我的Server端可以接受多个Client端的连接,并且都能接受他们所发送过来的数据,但只要其中一个Client端断开后,服务器端就接受不了其他Client端发送过来的数据,我知道我的逻辑有问题(后面是我的Server端的部分代码),但我不知道怎么写?请各位大侠指教!谢谢
然后我的Server端需要要向指定的Client端发送数据,这么我怎么才能做的到?(向指定的Client发送指定信息), 请大侠们指教一下,最好有代码,谢谢!
以下是我Server端的部分代码:
//开启线程
public void StartThread()
{
// ClientNumber++;
ServerThread = new Thread(new ThreadStart(RecieveAccept));//将接受客户端连接的方法委托给线程
ServerThread.Start();
CheckForIllegalCrossThreadCalls = false;//不捕获对错误线程的调用
this.SetText("服务于" + DateTime.Now.ToString() + "开始运行");
}
//接受客户端连接的方法和接收数据
private void RecieveAccept()
{
while(true)
{
//ClientNumber++;
ServerSocket.Listen(10);//开始监听,并且挂起数为10
ClientSocket[ClientNumber] = ServerSocket.Accept();
this.StartThread();
ClientSocket[ClientNumber].BeginReceive(msgbuffer, 0, msgbuffer.Length, 0, new AsyncCallback(RecieveCallBack), ClientSocket[ClientNumber]);
this.SetText(ClientSocket[ClientNumber].RemoteEndPoint.ToString());
//this.StartReceiveMsgThread();
while (m == 1)
{
try
{
i = ClientSocket[ClientNumber].Receive(msgbuffer);
//ClientSocket[ClientNumber].BeginReceive(msgbuffer, 0, msgbuffer.Length, 0, new AsyncCallback(RecieveCallBack), ClientSocket[ClientNumber]);
}
catch (Exception)
{
MessageBox.Show("有一客户端断开", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
//return;
break;
}
msg = Encoding.Unicode.GetString(msgbuffer, 0, msgbuffer.Length);
this.SetText(msg);
System.Array.Clear(msgbuffer, 0, msgbuffer.Length);
if (msg.Trim() == "stop")
{
m = 0;
}
}
//this.SetText(msgbuffer.ToString());
ClientNumber++;
}
}