Ситуация следующая WinSocket API, реализация вообще на Delphi 6, при этом меня больше то интересует реализация на уровне Win Socket API, хотя если кто знает применительно к Delphi хуже не будет.
Ситуация следующая. Создан UDP серверный сокет, привязан к адресу ждёт сообщений в отдельной нити.
Приходит UDP сообщение указанному выше серверному сокету. В этот момент я получаю IP и порт отправителя, после чего пробую послать используя слушающий серверный сокет сообщение на IP и порт отправителя только что полученного сообщения, вообще это строчкой:
SendRes:= sendto(FSocket,messageToSend[1],Length(messageToSend),0,SendAddr,SizeOf(SendAddr));//Тут значит следующие параметры указаны:
1) FSocket - тот самый слушающий сокет, который и получил изначальное сообщение
2) messageToSend переменная типа string содержит отправляемое новое сообщение(от сервера клиенту)
3) Length(messageToSend) - длина отправляемого сообщения, то ест переменной messageToSend
4) тут 0 так и было, это не я придумал, это так было в примерах
5) SendAddr содержит адрес и порт кому отправлять
6) длина переменной SendAddr
При попытке отправить как раз в этой строчке и возникает ошибка, поэтому вопрос вообще можно ли так делать.
Я рассуждаю так: раз игры по UDP за NAT работают, значит предположительно сервер шлёт сообщения клиенту на тот же порт с которого они пришли. Или тут дело не в этом?(про NAT написал только чтобы показать как рассуждаю, на самом же деле тестировал на локальном ПК, то есть и ошибка произошла когда и клиент и сервер запущены на одном ПК, и ситуация с разными портами клиента тоже)
Ещё дополнительный вопрос к теме: Почему у меня в клиентской программе, которая отправляет сообщение серверу порт клиента определяется один, а на сервере порт клиента другой? Например на клиентской программе порт клиента - 13574(всегда большие), а на серверной порт клиента к примеру - 1589(то есть примерно такого диапазона)?