Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2014, 14:21   #1
YuryD
Пользователь
 
Регистрация: 06.06.2009
Сообщений: 10
По умолчанию Обмен по UDP через маршрутизатор

Здравствуйте.
Пишу UDP терминал для обмена пакетами с удаленным терминалом. Всё хорошо работает, пока оба терминала в одной подсети. Когда же один из терминалов запускают в другой подсети, т.е. через маршрутизатор, обмена нет. Ниже приведен код инициализации UDP сокетов. Нигде не задается ни маска подсети, ни шлюз. Это правильно?
Код:
sockfd1 = socket(AF_INET, SOCK_DGRAM, 0);
sockfd2 = socket(AF_INET, SOCK_DGRAM, 0);

ZeroMemory(&servaddr, sizeof(servaddr));
ZeroMemory(&cliaddr, sizeof(cliaddr));
cliaddr.sin_family = AF_INET;
cliaddr.sin_addr.s_addr = inet_addr("192.168.1.254");
cliaddr.sin_port = htons(6000);

servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(12345);
bind(sockfd1, (struct sockaddr *)&servaddr, sizeof(servaddr));

FD_ZERO(&fds);
FD_SET(sockfd1, &fds);

ReceiveTimeout.tv_sec  = 0;
ReceiveTimeout.tv_usec = 5000000;             // 5 s

sendto(sockfd2, req, strlen(req), 0, (struct sockaddr *)&cliaddr,sizeof(cliaddr));

iRC = select(sockfd1+1, &fds, NULL, NULL, &ReceiveTimeout);

if (iRC)
{
    n = recv(sockfd1, recvstr, 100, 0);
    ///
    ...
    ///
}
Что надо дописать в код, чтобы оно работало через маршрутизатор?
Спасибо.

Последний раз редактировалось Stilet; 09.09.2014 в 14:34.
YuryD вне форума Ответить с цитированием
Старый 09.09.2014, 14:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Так это по-моему достигается не заданием масок а прописыванием в самой ОС маршрутизации. Вот например я юзаю консольную команду ROUTE чтоб перенаправлять в другую подсеть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2014, 15:27   #3
YuryD
Пользователь
 
Регистрация: 06.06.2009
Сообщений: 10
По умолчанию

Т.е. это не мой вопрос проблема, а сисадмина?
YuryD вне форума Ответить с цитированием
Старый 09.09.2014, 15:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Скорее да чем нет. Ну по крайней мере я бы не поленился и маршрутизацию настроить. Есть кажись еще такое понятие как "проброс портов", он же forwarding. Вот если память мне не изменяет это тоже относится к теме связи в разных подсетях.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2014, 20:42   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это чисто проблема сисадминаская.

хотя вы если знаете маршрут можете сами прописать, но поидее это на уровне шлюза корректнее делать обычно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обмен сообщеними по UDP Freedo C/C++ Сетевое программирование 8 09.01.2013 00:26
UDP обмен данными Dima DDM Работа с сетью в Delphi 0 21.11.2011 22:37
Пинг компьютера подключенного через маршрутизатор Shouldercannon Работа с сетью в Delphi 3 26.05.2011 17:09
Обмен байтами через Udp Dima DDM Работа с сетью в Delphi 8 03.01.2011 04:19
Посылка переменных через UDP RNT C/C++ Сетевое программирование 7 26.08.2009 17:59