C# Socket cannot access a disposed object

.Net技术 码拜 6年前 (2015-09-28) 1267次浏览
 

我想限制客户端的连接数,我设置了一个变量用来控制连接数,当到了连接数就不允许客户端继续连接,具体实现大概这样:

while (true)
            {
                Socket so = sock.Accept();
              
                if (i <= 3)
                {
                    list.Add(so);
                    i += 1;            
                    Console.WriteLine("当前连接人数:" + i);
                    //接受客户端的名字并保存
                   。(省略一些代码)
                }
                else
                {
                    so.Send(Encoding.Default.GetBytes("服务器已达最大人数,无法连接"));
                    so.Close();
                }
            }

我将接受的socket存到一个List里面,但是我将客户端连接到3个的时候,else里面的代码也不执行,为什么?

还有一个问题是,如果其中一个客户端断开了连接,怎么才能不影响其他客户端的正常操作,比如我现在其中一个客户端断开了连接,但是我在其他客户端发送信息时服务端会报错,错误提示是cannot access a disposed object是不是我服务端缺少了什么代码来处理这个情况?

方案推荐指数:40
因为你看到控制台显示

当前连接人数:4

所以以为出问题了?搞清楚你自己写的逻辑吧


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# Socket cannot access a disposed object
喜欢 (0)
[1034331897@qq.com]
分享 (0)