服务端开启监听后,有两个客户端连接上来。
这时选择其中一个客户端发送一条消息
ClientSocket[1].Send(msg);
然后开始接收
ClientSocket[1].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallBack), ClientSocket[1]); private void RecieveCallBack(IAsyncResult AR){
处理完收到的消息,继续接收
ClientSocket[1].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallBack), ClientSocket[1]);
}
客户端是这样的
ClientSocket.Receive(MsgSend)==“msg” 收到服务端发来的指令
然后开始向服务端发送消息
ClientSocket.BeginSend(MsgSend, 0, MsgSend.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), ClientSocket);protected void ReceiveCallBack(IAsyncResult AR)
{
继续发消息
ClientSocket.BeginSend(MsgSend, 0, MsgSend.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), ClientSocket);
}
以上都正常。
回到服务端,刚选择的其中一个客户端,这时我选中另外一个客户端
ClientSocket[2].Send(msg);
然后开始接收
ClientSocket[2].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallBack), ClientSocket[2]);
这时开始接收第二个客户端发来的消息,这个时候第一个客户端就停止发送消息了。
第一个客户端为什么会停止发送消息呢
这时选择其中一个客户端发送一条消息
ClientSocket[1].Send(msg);
然后开始接收
ClientSocket[1].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallBack), ClientSocket[1]); private void RecieveCallBack(IAsyncResult AR){
处理完收到的消息,继续接收
ClientSocket[1].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallBack), ClientSocket[1]);
}
客户端是这样的
ClientSocket.Receive(MsgSend)==“msg” 收到服务端发来的指令
然后开始向服务端发送消息
ClientSocket.BeginSend(MsgSend, 0, MsgSend.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), ClientSocket);protected void ReceiveCallBack(IAsyncResult AR)
{
继续发消息
ClientSocket.BeginSend(MsgSend, 0, MsgSend.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), ClientSocket);
}
以上都正常。
回到服务端,刚选择的其中一个客户端,这时我选中另外一个客户端
ClientSocket[2].Send(msg);
然后开始接收
ClientSocket[2].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallBack), ClientSocket[2]);
这时开始接收第二个客户端发来的消息,这个时候第一个客户端就停止发送消息了。
第一个客户端为什么会停止发送消息呢
在服务端将数据send到客户端之前,客户端都不会有响应
http://www.cnblogs.com/llllll/archive/2009/05/13/1455703.html
private void List_Client_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (List_Client.SelectedItems.Count > 0)
{
int selIndex = List_Client.SelectedItems[0].ImageIndex;
MsgBuffer = Encoding.Unicode.GetBytes("Send");
ClientSocket[selIndex].Send(MsgBuffer);
ClientSocket[selIndex].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallBack), ClientSocket[selIndex]);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}private void RecieveCallBack(IAsyncResult AR)
{
try
{
int selIndex = List_Client.SelectedItems[0].ImageIndex;
MsgBuffer = new byte[1024];
int number = ClientSocket[selIndex].Receive(MsgBuffer);
if (textBox1.InvokeRequired)
{
textBox1.Invoke(new EventHandler(ChangText), new object[] { MsgBuffer, EventArgs.Empty });
}
ClientSocket[selIndex].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallBack), ClientSocket[selIndex]);
}
catch (Exception)
{
//
}
finally
{
}
}
服务端不BeginReceive,客户端就不发送消息了。
上面那个程序是正确的,只是我没搞明白为什么会这样。
选择其中一个客户端后,别的客户端就不发送消息了,切换到其他客户端时,另外的客户端就停止发送消息。
目前实现的是这个效果,只是我不太明白别的客户端为什么会停止发送消息呢