Прежде чем кто-нибудь спросит, я довольно часто просматриваю этот сайт и активно использую Google, но безуспешно искал ответ.
Я пытаюсь создать программу для беспроводной сети (adhoc во всех случаях, кроменазвание).Большая часть сети будет работать с сообщениями TCP, но для определения всех соседних IP-адресов (так как они будут неизвестны при запуске), я выберу UDP Broadcast для начальных сообщений обнаружения.Этот код по большей части не имеет значения, поскольку начальное тестирование, похоже, работает, и в настоящее время я его не называю.
Ниже приведен раздел для получения и регистрации соседних 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 Socket .Это неверный аргумент, но я запутался в том, что это значит, поскольку требуемый аргумент - это EndPoint.
Это не удается при первом запуске, поэтому я не пытаюсь повторно привязать порт.