我正在编写一个ServerLocator,它基本上广播一个端口来查找将使用IPEndPoint响应的服务器,如果在当前IPHost上找不到任何内容,我需要搜索能够超时,然后继续下一个。
现在我正在做这样的事情(我已经删除了这段代码的一部分,所以它只包含了显示我的问题所需的内容。这里还有一些客户端绑定)
string serverIp = string.Empty;
while(string.isNullOrEmpty(serverIp))
{
foreach (IPAddress adress in ipHosts.AddressList)
{
using(Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
{
try
{
client.ReceiveFrom(buffer, ref tempRemoteEP);
//Get server IP
serverIp = tempRemoteEP.ToString().Split(":".ToCharArray(), 2)[0];
break;
}
catch(SocketException e)
{
// We expect connection attempt to time out if we cant find any server on this port and nic. Just continue with the next
if (e.SocketErrorCode == SocketError.TimedOut)
{
continue;
}
}
}
}
}
这可以正常工作,除了控制台被垃圾邮件发送:
System.dll
中发生了'System.Net.Sockets.SocketException'类型的第一次机会异常
有没有一种很好的方法来处理这样的异常而不会给控制台发送垃圾邮件?或者我可以通过其他方式处理这个问题,以避免超时异常的需要吗?
感谢。
答案 0 :(得分:1)
如果程序继续运行,实际上没有必要担心这一点,在程序中发送了很多这些异常。有关“首次例外”的更多信息,请参阅this article。
同时检查this link以了解如何配置Visual Studio如何处理异常。如果你配置这些,你可以打破(而不是继续)异常,看看真正发生了什么。但是,请注意隐藏异常似乎在调试中不起作用,请参阅here或here但是正如@Cipi指出的那样,它在Release中不可见。