Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Привязать UDPClient к сетевому интерфейсу


kami ©   (2008-02-12 22:26:00) 

Есть задача передачи большого объема информации через каналы с ограниченной пропускной способностью (GPRS).
Передача идет UDP-потоком (RTP-протокол). Нужно каждый UDP-клиент "связать" со своим GPRS-модемом, чтобы Windows не направило все данные в один и тот же модем.

Насколько понял, Indy позволяют такое делать только с серверами, а в этом нет необходимости.
Т.о, взяв простейшие UDP компоненты, и просмотрев их внутренности вместе с MSDN получилось следующее :
(привожу только основной код, проверки возвращаемых функциями ответов опускаю, курсивом - добавленный мной код)


procedure TUDPClient.Open;
.....
begin
GetSockAddrIn(FHost, FPort, SockAddrIn); // функция заполняет SockAddrIn
FLocalSocket:= socket(PF_INET, FType, 0);

GetSockAddrIn(FBindHost, FBindPort, localSockAddrIn);
Bind(FLocalSocket, localSockAddrIn, SizeOf(localSockAddrIn));


WSAASyncSelect(FLocalSocket, FHandle, WM_ASYNCSELECT, FD_READ);
connect(FLocalSocket, SockAddrIn, SizeOf(SockAddrIn));
....
end;


Вопрос 1 - правильно ли я понял MSDN (все функции не возвращают ошибок при отработке), и чем можно мониторить откуда (с какого IP) отправляются пакеты?

Вопрос 2 - может, я зря это все затеял и есть готовые компоненты (не слишком сложные, как Indy, чтобы можно было покопаться в их внутренностях) позволяющие осуществить это?


kami   (2008-02-13 22:41:00) [1]


> Если ты связал (bind) сокет  с определенным интерфейсом
> (адресом), то пакет будет отправлен через этот интерфейс.

Спасибо, первая часть вопроса снята. На вторую ответил сам - TCPMon отлично справляется с этим.


Evgeny V   (2008-02-13 05:59:00) [2]


> kami   (12.02.08 22:26)  
> Вопрос 1 - правильно ли я понял MSDN (все функции не возвращают
> ошибок при отработке)

Нет не правильно, такого в MSDN такого в MSDN не написано.....

Если ты связал (bind) сокет  с определенным интерфейсом (адресом), то пакет будет отправлен через этот интерфейс.


Slym   (2008-02-13 04:56:00) [3]

через виндовую таблицу маршрутизации не перепрыгнуть :(
в отсутствии частных маршрутов все будет слать в маршрут по умолчанию, а его последний подключившийся модем


Наверх

Титульная страница Поиск, карта сайта Написать письмо