总结一下我的情况,我正在编写一个服务器程序,它打开一个 UDP 套接字,任意数量的客户端都可以与之通信。我使用类似于以下的代码接收 UDP 数据包:
EndPoint sender = new IPEndPoint(IPAddress.Any, 0);
try
{
count = socket.ReceiveFrom(buf, ref sender); // 'count' and 'buf' are defined elsewhere
// If an exception isn't thrown, 'sender' will now contain the EndPoint of the client that sent the packet.
}
catch(SocketException e)
{
if(e.ErrorCode == 10054)
{
// How do I get the EndPoint that caused the error?
// The 'sender' variable above does not contain the EndPoint.
}
}
当我的服务器向已关闭其自己的套接字的客户端发送数据包时,我收到错误代码 10054(“现有连接被远程主机强制关闭”)。我想停止向该客户端发送数据包,以便 SocketExceptions 停止被抛出,这严重损害了我的服务器性能。
但我的问题是我不知道如何获取被强制关闭的特定客户端的 EndPoint。(在抛出异常之前,上面的'sender'变量没有设置为任何有用的东西。)我怎样才能找到那个端点?
一个不太理想但仍然可行的解决方案是简单地禁止抛出 SocketException。
有任何想法吗?
谢谢!