Y
YuryD
Здравствуйте.
Пишу 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);
///
...
///
}
Что надо дописать в код, чтобы оно работало через маршрутизатор?
Спасибо.
Пишу 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);
///
...
///
}
Что надо дописать в код, чтобы оно работало через маршрутизатор?
Спасибо.