-
Доброго времени суток! Для передачи данных по протоколу UDP использую стандартные сокеты Windows. Столкнулся со следующей проблемой - в связи со спецификой работы оборудования на другом конце, мне необходимо указывать явно порт отправителя; иначе он получается "плавающим". Как это можно сделать? Спасибо.
-
И что же это за "специфика", позволь полюбопытствовать ? За каким лешим потребовалось указывать порт отправителя на прикладном уровне, если он и так уже фигурирует на транспортном уровне ?
-
> Как это можно сделать?
bind?
-
> Сергей М. © (02.12.09 22:27) [1] > И что же это за "специфика", позволь полюбопытствовать ? > За каким лешим потребовалось указывать порт отправителя > на прикладном уровне, если он и так уже фигурирует на транспортном > уровне ?
Специфика в том, что оборудование на другом конце отвечает именно на тот порт, с которого пришли данные. В ситуации, когда я сам не знаю, с какого порта отправляю данные, я не знаю, на каком порте ловить ответ.
> DVM © (03.12.09 01:07) [2] > bind?
Я так понимаю, что bind осуществляет связывание сокета с локальным адресом для приема данных.
-
При UDP соединение не устанавливается, поэтому бессмысленно говорить о порте с которого послано, тем более пытать дважды открыть порт, будет просто ошибка.
-
> Michael (03.12.09 08:38) [3]
> Я так понимаю, что bind осуществляет связывание сокета с > локальным адресом для приема данных.
не обязательно для приемы, для передачи тоже можно.
struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; };
-
> В ситуации, когда я сам не знаю, с какого порта отправляю > данные, я не знаю, на каком порте ловить ответ.
На том же самом, с которого ты отправил оборудованию дейтаграмму. Ты сокет-то не закрывай после отправки - с какого сокета отравлял, тот и примет ответ
|