![]() |
|
Модераторы: feodorv |
![]()
|
|
| Zerg1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 11.7.2006 Репутация: нет Всего: нет |
Имеем следующую проблему. Есть клиент-серверное приложение, в котором идёт обмен сообщениями по UDP протоколу. Понадобилось написать над этим делом TCP/IP-мост. То есть не у всех клиентов есть возможность связаться с сервером по UDP. Сами понимаете, «подбривка» UDP файрами, http-proxy и прочие прелести корпоративных интранетов. Посему, чтобы не курочить логику сетевого движка клинта и сервера было принято решение сделать их полное тунелирование через TCP.
В ходе решения этой проблемы возник вопрос. Пусть на машине с IP адресом A есть в одном процессе две нити, обменивающиеся по UDP. Одна - сервер, на порту P1, а вторая – клиент (порт при посылке будет любой - какой займём, обозначим его Pany). Также в нити клиента есть переменная addr типа sockaddr_in, содержащая некий заранее известный и специально заданный IP адрес и порт, например, Ax:Py. КАК послать (или что сделать надо?) из нити клиента сообщение на сервер ТАКИМ образом, чтобы на сервере АДРЕС ОТПРАВИТЕЛЯ сообщения был не A:Pany, а Ax:Py? Это важно, иначе мост без курочки созданного движка сделать не удастся. Добавлено @ 23:09 Да, программы – глухие консольники на vcpp 5.0. Никакого mfc и прочего йада не пьйу Знаю, что старый компилер, но работает же! |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
вот это я мало понял я так понимаю делаешь тунель для юдп так что нельзя полностью инкапсулировать пакет юдп в тсп? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Zerg1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 11.7.2006 Репутация: нет Всего: нет |
втавить данные из юдп пакета в тэсипи можно.
это не вопрос вопрос в том что сервер юдп заточен на реальные адреса юдп клиентов. он должен получать пакеты как бы от "далёких" машин, а не с себя, с нити-пересыльщика. обстрагируйся от всего, забудь всё что я писал и сосердоточься только на этом: "В ходе решения этой проблемы возник вопрос. Пусть на машине с IP адресом A есть в одном процессе две нити, обменивающиеся по UDP. Одна - сервер, на порту P1, а вторая – клиент (порт при посылке будет любой - какой займём, обозначим его Pany). Также в нити клиента есть переменная addr типа sockaddr_in, содержащая некий заранее известный и специально заданный IP адрес и порт, например, Ax:Py. КАК послать (или что сделать надо?) из нити клиента сообщение на сервер ТАКИМ образом, чтобы на сервере АДРЕС ОТПРАВИТЕЛЯ сообщения был не A:Pany, а Ax:Py?". |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
вот это и запутано!
я правильно понял , т.е. для того чтобы передать пакет юдп ты шлешь его на локальный юдп порт который пересылает по тсп, имхо есть 2 решения : 1. курочим заголовок юдп под себя, ( при этом надо знать все айпи в цепочке!) 2. перехватываем вин апи от сокета, и все юдп на определеный порт, шлем в трубу через тсп -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Zerg1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 11.7.2006 Репутация: нет Всего: нет |
как курочить заголовок?
смысл задачи моей в том, что сервер не знает кто из клиентов реальный юдп, а кто нет. поэтому пересыльщик на сервере должен уже локально послать пакет на сервер, НО АДРЕС ОТПРАВИТЕЛЯ ДОЛЖЕН БЫТЬ НЕ ЛОКАЛЬНЫЙ, пересыльщецкий, а такой, какой надо. КАК это сделать? ещё раз задача - это то, что я откавычил, когда говорил про сосредоточение. Это сообщение отредактировал(а) Zerg1 - 7.10.2006, 00:30 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
читаем как устроен айпи пакет вообще! потом как юдп
вот тоже самое только по русски , а не каким то непонятным языком! -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Zerg1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 11.7.2006 Репутация: нет Всего: нет |
А какая разница как он устроен, этот пакет. Я послал сообщение с помощью sendto() и всё. Как тут подступиться к его устройству?
А что непонятно. На одной машине один процесс из двух нитей. Одна нить посылает другой UDP сообщение. Надо чтобы принимающая нить (UDP-сервер), осуществляющая приём с помощью data_size = recvfrom(my_sock, buff, BUFF_SIZE - 1, 0, (sockaddr *) &client_addr, &client_addr_size); в client_addr имела не сокет нити отправителя с этой же машины, а тот адрес, какой нить отправитель захочет. Это нужно для того, чтобы не лезть в устройство сервера. Он должен работать как раньше. Идентификацие клиентов идёт по их реальныом адресу и порту. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
нужно для того что бы ты хочешь это делать , но имхо без залазиния в сами заголовки пакетов такого не сделать , вариант с , чтото типа, юдп - прокси(с мостом через тсп) не подойдет т.к. будет менятся адресная информация и вообще имхо что либо сделать через простые ф_ции типа
у тя не выйдет , если нет возможности изменить свой протокол обмена по юдп, так что бы инфа о клиенте передавалась в данных юдп -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |