无法连接到服务器(通过远程连接)

Unable to connect to server (over a remote connection)

本文关键字:远程连接 服务器 连接      更新时间:2023-10-16

我已经在这个项目上工作了一段时间,想通过远程连接测试一些新功能,但客户端无法连接(虽然它过去能够连接(。当地一切正常。目前我无法向前移植,所以我正在使用hamachi。我尝试使用 wireshark 捕获 hamachi 网络流量,客户端请求确实到达了,但服务器没有收到它们。

任何帮助将不胜感激。

代码

(省略错误检查以使代码更具可读性(:

客户:

   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) 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'

如果您能够连接 - 您应该看到 3 路握手(TCP 流连接(。如果没有错误处理,wireshark 将显示这一点。您说客户端请求确实到达了,但您的代码没有发送任何内容(没有可用的发送代码(。您还说服务器没有收到它们 - 如果它连接并且您发送任何内容,则您的错误处理不可能显示任何内容,服务器也不会收到任何内容(但服务器代码缺少任何接收例程调用(。

我认为现在你无法得到太多帮助。更新你的代码,验证它是否真的在本地工作(你的意思是在这里环回,对吗?(,然后测试"非本地",添加错误处理并在客户端和服务器端使用wireshark。