我已经在这个项目上工作了一段时间,想要通过远程连接测试一些新功能,但客户端无法连接(虽然它能够在过去连接)。一切都在当地很好。目前我无法移动foward所以我正在使用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
}
}
答案 0 :(得分: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'
如果您能够连接 - 您应该看到3路握手(TCP流连接)。如果没有错误处理和wireshark将显示。您说客户端请求确实到达但您的代码没有发送任何内容(没有可用的发送代码)。您还说服务器没有收到它们 - 如果它连接并且您发送任何内容,则您的错误处理无法显示任何内容并且服务器什么都没有收到(但服务器代码缺少任何接收例程调用)。
我认为你现在无法得到很多帮助。更新你的代码,验证它是否真的在本地工作(你的意思是环回来吗?),然后测试'不在本地',添加错误处理并在客户端和服务器端使用wireshark。