首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法连接到服务器(通过远程连接)

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

Stack Overflow用户
提问于 2013-10-07 16:27:11
回答 1查看 273关注 0票数 1

我已经在这个项目上工作了一段时间,并希望通过远程连接测试一些新特性,但是客户端未能连接(而它在过去能够连接)。当地一切都很好。目前我无法移植foward,所以我使用hamachi。我尝试用wireshark捕获hamachi网络流量,客户端请求确实到达,但是服务器没有接收到它们。

任何帮助都是非常感谢的。

代码(省略错误检查以提高代码的可读性):

客户端:

代码语言:javascript
复制
   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);

服务器:

代码语言:javascript
复制
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
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-07 20:30:03

我不知道如何简化您粘贴的代码,但是:

代码语言:javascript
复制
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,这根本不能工作。此外,请务必处理错误-(是的,您说是故意省略的),但我敢打赌,如果服务器拒绝连接,错误处理就会显示这一点。否则,它连接得很好,但你却不这么说。你还说:

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19229920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档