我已经在这个项目上工作了一段时间,并希望通过远程连接测试一些新特性,但是客户端未能连接(而它在过去能够连接)。当地一切都很好。目前我无法移植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
}
}发布于 2013-10-07 20:30:03
我不知道如何简化您粘贴的代码,但是:
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?...so,这根本不能工作。此外,请务必处理错误-(是的,您说是故意省略的),但我敢打赌,如果服务器拒绝连接,错误处理就会显示这一点。否则,它连接得很好,但你却不这么说。你还说:
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。
https://stackoverflow.com/questions/19229920
复制相似问题