TCP / IP客户端可以连接到无法访问的IP吗?

时间:2018-04-22 17:54:07

标签: c++ tcp

我一直在寻找我的问题的年龄,我可能在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()也能正常工作。

有没有人知道发生了什么?如果有人能把我踢出去,我会很高兴的。

1 个答案:

答案 0 :(得分:0)

“TCP / IP客户端可以连接到无法访问的IP吗?” - 不。显然不是。

如果用于建立连接的任何内容报告TCP套接字与无法访问的IP成功连接,那么您使用的任何内容都将被破坏(或者您使用它错误(可能是最可能的情况)或IP < em> 实际上是可以访问的。)