Я пытаюсь создать программу для беспроводной сети (adhoc во всем, кроме имени). Большая часть сети будет иметь дело с обменом сообщениями 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, и независимо от того, как я его настроил, привязка завершается с ошибкой SocketException.ErrorCode 10022 Коды ошибок сокета Windows. Это недопустимый аргумент, но я не понимаю, что это значит, поскольку требуемый аргумент — это EndPoint.
Это не удается при первом запуске, поэтому я не пытаюсь переназначить порт.