У меня проблема с сокетами.Я написал себе два простых приложения, один сервер и один клиент.Сервер просто ожидает поступления UDP-пакета, распечатывая что-то в консоли, как только это произойдет.Клиент отправляет пакет UDP в конкретную конечную точку.
// server
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sock.Bind(new IPEndPoint(IPAddress.Any, 1337));
IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0);
byte[] buf = new byte[1024];
sock.ReceiveFrom(buf, ref remote);
Console.WriteLine("Received packet.");
// client
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint remote = new IPEndPoint(IPAddress.Parse(Console.ReadLine()), UInt16.Parse(Console.ReadLine()));
byte[] buf = { 1, 2, 3, 4 }; // random data
sock.SendTo(buf, remote);
Теперь странная вещь заключается в том, что когда сокет клиента отправляет свой пакет на общедоступный IP-адрес моего маршрутизатора, сокет сервера получает его только в том случае,клиент не работает на том же компьютере, что и сервер.Поэтому, если я запустил сервер на своем ПК, а затем запустил клиент на своем ПК, ввел мой общедоступный IP-адрес и порт 1337, сервер ничего не получил.Однако, если я отправлю клиентское приложение своему другу и предоставлю ему мой IP-адрес и порт, оно будет работать отлично.Это также работает, если я позволю клиенту подключаться к моему локальному IP-адресу вместо моего публичного.
Я единственный, кто испытывает такое поведение?Порт 1337 перенаправляется на компьютер, на котором запущен сервер, кстати.