簡體   English   中英

為什么這個程序在沒有任何網絡流量的情況下超時?

[英]Why is this program timing out without any network traffic?

我正在嘗試創建一個簡單的 c++ 程序,在制作套接字和連接到服務器時隱藏 Linux 和 Windows 之間的差異

此代碼的 Linux 部分編譯時沒有任何警告或錯誤,但在解析主機 IP 后超時並且未連接到正在運行的服務器 ( nc -lvnp 7777 )

使用tcpdump -i eth0 -v port 7777捕獲所有進出運行程序的機器的流量顯示什么

class Socket
{
    public:
    int initsoc(void);

    int connectsoc(int sock, const char * host, int port);

};

int Socket::connectsoc(int sock, const char * host, int port)
    #ifdef _WIN32
        /* windows part */
    #else

        struct hostent *server;
        struct sockaddr_in server_addr;
        struct in_addr *address;

        server_addr.sin_family = AF_INET;
        server_addr.sin_port = port;

        /* resolve host */
        
        server = gethostbyname(host);
        if (server == NULL)
        {
            printf("Error : %s \nFailed to resolve %s:%d", strerror(errno), host, port);
            return -1;
        }


        address = (struct in_addr *) (server->h_addr);
        printf("Resolved: [%s] ===> [%s]\n", host, inet_ntoa(*address));        
        server_addr.sin_addr.s_addr = inet_addr(inet_ntoa(*address));
        iResult = connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
        printf("Connect returned : %d\n",iResult);
        if (iResult < 0)
        {
            printf("Error: %s\nFailed to connect\n",strerror(errno));
            return -1;
        }
        printf("Connected to [%s:%d]\n",host,port);
        
        return 0;

我試圖在沒有任何 NAT 的情況下在與運行程序的計算機位於同一網絡上的計算機上打開 netcat 偵聽器,但它仍然超時

這就是我的編譯方式和輸出

g++ -Wall -ggdb3 -pedantic -g main.cpp  -o app 
Resolved: [10.0.0.100] ===> [10.0.0.100]
Connect returned : -1
Error: Connection timed out
Failed to connect

運行代碼的機器的ip是10.0.0.2

運行netcat服務器的機器的ip是10.0.0.100

正如@user253751 所評論的,這一行:

server_addr.sin_port = port;

應改為:

server_addr.sin_port = htons(port);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM