gpt4 book ai didi

c# - 如何确定哪个 EndPoint 导致了错误代码为 10054 的 SocketException? ("An existing connection was forcibly closed by the remote host.")

转载 作者:太空宇宙 更新时间:2023-11-03 11:12:05 24 4
gpt4 key购买 nike

总结一下我的情况,我正在编写一个服务器程序,它打开一个 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,这会严重损害我的服务器的性能。

但我的问题是我不知道如何获取被强行关闭的特定客户端的端点。 (在抛出异常之前,上面的 'sender' 变量没有设置任何有用的值。)我怎样才能找到那个 EndPoint?

一个不太理想但仍然可行的解决方案是简单地禁止抛出 SocketException。

有什么想法吗?

谢谢!

最佳答案

我想我有一个想法。您应该创建并维护一个客户列表,该列表将包含它们的所有端点(以及您可能需要的其他有用信息)。

然后数据传输将发生在“已连接”的客户端上,而所有其他“未知”的计算机通常会尝试通过 IPAddress.Any 与您“连接”。

关于c# - 如何确定哪个 EndPoint 导致了错误代码为 10054 的 SocketException? ("An existing connection was forcibly closed by the remote host."),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13640546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com