私は、基本的にIPEndPointで応答するサーバーを見つけるためのポートをブロードキャストするServerLocatorを作成しています。現在のIPHostに何も見つからない場合、それから次のものに進む。ハンドルをSocket.ReceiveFromで処理すると、スマーミングコンソールなしでタイムアウトが発生する
今、私はこのような何かをしています(それが唯一の私の問題を表示するために必要とされるものを含んでいるので、私はこのコードの一部を削除しました。ここで起こっていくつかのクライアントバインディングもあります)
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.Net.Sockets.SocketException」の最初のチャンス例外がSystem.dllの中
コンソールをスパムすることなくこのような例外を処理する良い方法はありますか?または、タイムアウトからの例外の必要性を避けるために、これを他の方法で処理できますか?
ありがとうございました。
RELESE設定でプロジェクトをビルドしても、それは起こりません。 – Cipi
それは本当ですが、それは多くのスパムにはそれが動作するのが難しくなる場合 – Bakery