服务端开启监听后,有两个客户端连接上来。
这时选择其中一个客户端发送一条消息
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]);
这时开始接收第二个客户端发来的消息,这个时候第一个客户端就停止发送消息了。
第一个客户端为什么会停止发送消息呢

解决方案 »

  1.   

    那是服务端自己的方法,你指望客户端有什么响应?
    在服务端将数据send到客户端之前,客户端都不会有响应
      

  2.   

    第一个客户端 好像就BeginReceive了一次吧,参考
    http://www.cnblogs.com/llllll/archive/2009/05/13/1455703.html
      

  3.   

    服务端是这样的//选择一个客户端发送指令
    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
                {
                }
            }
      

  4.   

    是的,我现在就在想如果服务端不BeginReceive了,那么这个连接是什么状态呢?
    服务端不BeginReceive,客户端就不发送消息了。
    上面那个程序是正确的,只是我没搞明白为什么会这样。
    选择其中一个客户端后,别的客户端就不发送消息了,切换到其他客户端时,另外的客户端就停止发送消息。
    目前实现的是这个效果,只是我不太明白别的客户端为什么会停止发送消息呢