socket里面的BeginReceive,求指导!

liuxibei1987 2014-06-23 02:04:04
服务端使用BeginReceive 这个方法时,客户端会有什么响应吗?

...全文
329 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuxibei1987 2014-06-23
  • 打赏
  • 举报
回复
有人来帮忙分析下吗
liuxibei1987 2014-06-23
  • 打赏
  • 举报
回复
引用 5 楼 bdmh 的回复:
第一个客户端 好像就BeginReceive了一次吧,参考 http://www.cnblogs.com/llllll/archive/2009/05/13/1455703.html
是的,我现在就在想如果服务端不BeginReceive了,那么这个连接是什么状态呢? 服务端不BeginReceive,客户端就不发送消息了。 上面那个程序是正确的,只是我没搞明白为什么会这样。 选择其中一个客户端后,别的客户端就不发送消息了,切换到其他客户端时,另外的客户端就停止发送消息。 目前实现的是这个效果,只是我不太明白别的客户端为什么会停止发送消息呢
liuxibei1987 2014-06-23
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
这要看你客户端的代码逻辑了.是不是没有接受到服务端的返回,客户端就停止工作了? 你接收客户端2的消息时,停止向客户端1返回了
服务端是这样的

//选择一个客户端发送指令
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
            {


            }
        }
bdmh 2014-06-23
  • 打赏
  • 举报
回复
第一个客户端 好像就BeginReceive了一次吧,参考 http://www.cnblogs.com/llllll/archive/2009/05/13/1455703.html
於黾 2014-06-23
  • 打赏
  • 举报
回复
而且MS你将服务端和客户端搞反了. 应该是客户端向服务端发送请求,服务端给客户端返回数据. 而不是客户端连接好就等待服务端发请求过来.
於黾 2014-06-23
  • 打赏
  • 举报
回复
这要看你客户端的代码逻辑了.是不是没有接受到服务端的返回,客户端就停止工作了? 你接收客户端2的消息时,停止向客户端1返回了
於黾 2014-06-23
  • 打赏
  • 举报
回复
那是服务端自己的方法,你指望客户端有什么响应? 在服务端将数据send到客户端之前,客户端都不会有响应
liuxibei1987 2014-06-23
  • 打赏
  • 举报
回复
服务端开启监听后,有两个客户端连接上来。 这时选择其中一个客户端发送一条消息 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]); 这时开始接收第二个客户端发来的消息,这个时候第一个客户端就停止发送消息了。 第一个客户端为什么会停止发送消息呢

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧