Невозможно подключиться к серверу (через удаленное соединение)
Я работал над этим проектом некоторое время и хотел протестировать некоторые новые функции через удаленное соединение, но клиент не смог подключиться (хотя он мог подключаться в прошлом). Все отлично работает локально. На данный момент я не могу портировать foward, поэтому я использую хамачи. Я попытался захватить сетевой трафик hamachi с помощью wireshark, и клиентские запросы приходят, но сервер их не получает.
Любая помощь с благодарностью.
Код (проверка ошибок не включена, чтобы сделать код более читабельным):
Клиент:
addrinfo ADDRESSINFO, *CLIENTINFO=NULL;
ZeroMemory(&ADDRESSINFO, sizeof(ADDRESSINFO));
ADDRESSINFO.ai_family = AF_INET;
ADDRESSINFO.ai_socktype = SOCK_STREAM;
ADDRESSINFO.ai_protocol = IPPROTO_TCP;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
getaddrinfo(strIP.c_str(), strPort.c_str(), &ADDRESSINFO, &CLIENTINFO);
connect(ConnectSocket, CLIENTINFO->ai_addr, CLIENTINFO->ai_addrlen);
freeaddrinfo(CLIENTINFO);
Сервер:
addrinfo ADDRESSINFO, *SERVERINFO=NULL;
ZeroMemory(&ADDRESSINFO, sizeof(ADDRESSINFO));
ADDRESSINFO.ai_family = AF_INET;
ADDRESSINFO.ai_socktype = SOCK_STREAM;
ADDRESSINFO.ai_protocol = IPPROTO_TCP;
getaddrinfo(SERVER_IP, SERVER_PORT, &ADDRESSINFO, &SERVERINFO);
ListenSocket = socket(SERVERINFO->ai_family, SERVERINFO->ai_socktype, SERVERINFO->ai_protocol);
ConnectionSocket = socket(SERVERINFO->ai_family, SERVERINFO->ai_socktype, SERVERINFO->ai_protocol);
bind(ListenSocket, SERVERINFO->ai_addr, SERVERINFO->ai_addrlen);
freeaddrinfo(SERVERINFO);
listen( ListenSocket, SOMAXCONN )
while(true)
{
if(ConnectionSocket = accept(ListenSocket, NULL, NULL))
{
//do stuff
}
}
1 ответ
Я не знаю, насколько сокращенным является код, который вы вставили, но:
1) There is no place where you set destination address
2) There is no place you set destination port
3) To which port is server trying to bind?
... так что это просто не может работать вообще. Более того, пожалуйста, обрабатывайте ошибки - (да, вы сказали, что специально их опускали), но я уверен, что если сервер отказывает в соединении, ваша обработка ошибок показывает это. В противном случае он подключается нормально, но вы утверждаете иначе. Вы также говорите:
1) 'the client failed to connect'
2) and later you say 'the client requests do arrive, but the server doesn't receive them'
Если вы можете подключиться - вы должны увидеть трехстороннее рукопожатие (TCP-соединение). Если не обработка ошибок и wireshark покажет это. Вы говорите, что клиентские запросы приходят, но ваш код ничего не отправляет (код отправки не доступен). Вы также говорите, что сервер не получает их - если он подключается, и вы отправляете что-либо, то нет никакой возможности, чтобы ваша обработка ошибок ничего не показывала и сервер ничего не получал (но в коде сервера отсутствует какой-либо обычный вызов).
Я думаю, что сейчас вы не можете получить большую помощь с этим. Обновите свой код, проверьте, действительно ли он работает локально (вы имеете в виду loopback, верно?), Затем протестируйте "не локально", добавьте обработку ошибок и используйте wireshark как на стороне клиента, так и на стороне сервера.