我一直在寻找我的问题的年龄,我可能在stackoverflow上掉了20次而没有找到任何东西。
这是我的事情:我正在尝试用C ++开发一个简单的TCP / IP客户端(我遵循编写良好的Beej指南),它应该与python TCP / IP服务器通信。
我的代码是(在函数中):
memset(&m_hints, 0, sizeof m_hints);
m_hints.ai_family=AF_UNSPEC;
m_hints.ai_socktype=SOCK_STREAM;
m_portnbrstring=to_string(m_portnbr);
if ((m_getaddrinfostatus=getaddrinfo(m_serverIP,(const char*) m_portnbrstring.c_str(), &m_hints, &m_servinfo))!=0)
{
char tempstrerror[100];
strcpy(tempstrerror,"getaddrinfo in TCPStartClient: ");
strcat(tempstrerror,gai_strerror(m_getaddrinfostatus));
ExitAndDisplayMessage(tempstrerror);
}
for(m_plist=m_servinfo; m_plist!=NULL; m_plist=m_plist->ai_next)
{
if ((m_sockfd=socket(m_plist->ai_family, m_plist->ai_socktype, m_plist->ai_protocol))==-1)
{
perror("Something went wrong when creating TCP socket");
continue;
}
break;
if (connect(m_sockfd, m_plist->ai_addr, m_plist->ai_addrlen)==-1)
{
close(m_sockfd);
perror("Something went wrong when connecting to TCP socket");
continue;
}
break;
}
if (m_plist==NULL) ExitAndDisplayMessage("getaddrinfo in TCPStartClient: failed to connect");
char tempaddr[INET6_ADDRSTRLEN];
inet_ntop(m_plist->ai_family,get_in_addr((struct sockaddr *)m_plist->ai_addr),tempaddr, sizeof tempaddr);
cout << "TCPClient started at IP " << tempaddr << " on port " << ntohs(get_in_port((struct sockaddr *)m_plist->ai_addr)) << endl;
定义是
int m_sockfd;
char *m_serverIP;
struct addrinfo m_hints;
struct addrinfo *m_servinfo;
struct addrinfo *m_plist;
直到这里,一切看起来都很好,但即使我指定的IP无法访问,连接功能仍会发送0(无错误)。基本上,即使服务器关闭或者使用随机IP进行测试(我使用fping测试无法访问),connect()也能正常工作。
有没有人知道发生了什么?如果有人能把我踢出去,我会很高兴的。
答案 0 :(得分:0)
“TCP / IP客户端可以连接到无法访问的IP吗?” - 不。显然不是。
如果用于建立连接的任何内容报告TCP套接字与无法访问的IP成功连接,那么您使用的任何内容都将被破坏(或者您使用它错误(可能是最可能的情况)或IP < em> 实际上是可以访问的。)