ChaoPengZhang 2021-04-30 14:43 采纳率: 0%
浏览 232

C#socket 服务端在客户端断开连接后,服务端卡死在socket.receive()

项目主要是不停的接收多个客户端发送过来的数据,服务端发送指令给客户端,客户端返回数据给服务端。在测试运行时,其中一个客户端断电(断开连接),导致服务端卡死在接收的死循环里,导致正常连接的客户端的数据无法接收。,如何关闭已断开的socket?

  void Recive(object o)
        {
            Socket socketSend = o as Socket;
             while (true)
            {
                try
                {
                    //客户端连接成功后,服务器应该接受客户端发来的消息
                    byte[] buffer = new byte[1024 * 1024 * 2];
                    //实际接受到的有效字节数

                    int r = socketSend.Receive(buffer);

                    if (r == 0)
                    {
                        break;
                    }
                    string str = Encoding.UTF8.GetString(buffer, 0, r);
                }
                catch
                {
                    // MessageBox.Show("接收出错");
                }

            }
  • 写回答

1条回答 默认 最新

  • 浮沉与木 2021-05-08 14:55
    关注

    独立线程

    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题