![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
UDPSocket не получает сообщение [D7, WinXP]
SAG © (2004-03-30 15:54:00)Не понятно как работать с UDPSocket компонентом в режиме сервера. Адрес локальный и порт настроены, сидим в ожидании пакета, но события OnRecieve нет... Пример
procedure TForm1.Button4Click(Sender: TObject);
begin
UDPClient.Open;
UDPClient.Active:=True;
UDPClient.ReceiveBuf(Buf,1000,0);
end;
SAG (2004-03-31 08:22:00) [1]спасибо... воспользовался компонентами инди и усе заработало
Verg (2004-03-30 19:51:00) [2]Ну да, все так и есть в честерке.
Т.е. решить проблему можно только в обход компоненты - напрямую через WinSock.Bind
Verg (2004-03-30 18:20:00) [3]А бесполезно ждать.
> Адрес локальный и порт настроены,
Помнится смотрел я этот UDPSocket....
Не знаю как устроен UDPSocket в седьмой Дельфе, но в шестой эти свойства не влияют ровным счетом ни на что. Тут этот UDPScoket как будь-то вообще недаделанный какой-то. Ему вообще не делают bind. Никогда :)
Поэтому, после connect-а (Acive := true или Open, а кстати у тебя получилось "масло маслянное") ядром ему всегда присваивается локалный адрес INADDR_ANY (если ты вообще не задал RemoteHost) или адрес сетевого интерфейса пригодного для передачи IP к RemoteHost (по таблице маршрутизации) и локальный порт каким-то случайным образом выбранный из свободных в служебном диапазоне. Не свойствам компонента присваивается! А в ядре, полям объекта socket, с которым связан компонент UDPSocket.
Вот. И управлять тем, на каком порту он будет принимать датаграммы я не представляю возможным.
После коннекта получившийся порт узнать можно (getsockname), но управлять - нет.
Почему так сделано - сам недоумеваю.
Вроде так. Приду домой, еще раз гляну....