C# 的服务器向之前登陆的时候保存的客户端Socket发送数据的时候报错了 60C

报错:The operation is not allowed on non-connected sockets.
问题是这样的,制作添加好友模块时,遇到了一个问题,就是在登录的时候,服务端会通过ID绑定那个Socket:


//目前在线的客户端字典,与ID绑定
Dictionary<int, Socket> DicOnlineClients;

绑定:

 //向目前在线的客户端列表添加这个客户端
DicOnlineClients.Add(playerID, packet._peer);

然后发送好友请求的时候会通过这个ID发到与这个ID绑定的Socket上,前提是这个客户端没有离线

 //获取此ID的Socket
Socket socket;
if (DicOnlineClients.TryGetValue(FriendID,out socket))
{
    _server.Send(SendStream, socket);
}

但是问题出在,在Send的时候,报错了 The operation is not allowed on non-connected sockets.
可是我客户端的socket明明是在线的啊
请大神帮忙解答下。或者有没有其他的方法,用于向指定的客户端发送数据的,我这里用的是通过玩家ID辨识

2个回答

send 返回并不表示数据发送成功,它只表示数据被拷贝到了发送缓冲区,下面将有协议栈来完成物理传输过程。
当协议栈在发送数据时,发送缓冲区是锁定的,这时在往里面拷贝数据是不成功的;
也就是说,在发送数据时,在send是会失败的。所以每次send都需要检查返回值。
就是你发送太快了 等对方接收了 你的send就会成功了 所以为了效率 你至少用下select、event等等这些简单的模式...

qq_27305193
G--G 没有频繁的发送啊,而且我是在DEBUG模式下,就是在发送的执行send的时候报错了,
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐