ワイヤレス メッシュ用のプログラムを作成しようとしています (名前以外はアドホックです)。ほとんどのネットワークは TCP メッセージングを処理しますが、すべての近隣 IP を特定するために (起動時に不明になるため)、最初の検出メッセージに UDP ブロードキャストを使用することにしました。そのコードは、ほとんどの場合、最初のテストが機能しているように見えたため、無関係であり、現在は呼び出していません。
以下は、ネイバーの IP を受信して登録するセクションです。
protected override void ReceiveMessageUDP()
{
while (live)
{
try
{
UdpListener = new UdpClient(_PORTRECEIVE);
UdpListener.EnableBroadcast = true;
Socket socket = UdpListener.Client;
IPEndPoint endPoint1 = new IPEndPoint(IPAddress.Loopback, _PORTRECEIVE);
IPEndPoint endPoint2 = new IPEndPoint(IPAddress.Any, _PORTRECEIVE);
socket.Bind(endPoint2);
socket.Listen(25);
Socket connected = socket.Accept();
byte[] buffer = new byte[1024];
int length = connected.Receive(buffer);
IPAddress remoteIP = ((IPEndPoint)connected.RemoteEndPoint).Address;
if (!ipAddresses.Contains(remoteIP))
ipAddresses.Add(remoteIP);
Message.Add(Encoding.ASCII.GetString(buffer, 0, length));
}
catch (SocketException e) { Console.WriteLine(e.ErrorCode); }
catch (Exception) { }
}
}
両方の IPEndPoints でテストしましたが、設定方法に関係なく、Bind は SocketException.ErrorCode 10022 Windows Socket Error Codesで失敗します。これは無効な引数ですが、必要な引数が EndPoint であるため、それが何を意味するのか混乱しています。
これは最初の実行で失敗するため、ポートを再バインドしようとしているわけではありません。