0

我正在以这种方式从终端读取地址以将客户端连接到服务器,但有人告诉我这是不正确的,因为我应该通过 inet_pton 函数对其进行转换。这是真的?你能解释一下为什么吗?我正在使用 127.0.0.1 进行测试,这段代码似乎一切正常。地址是程序名后的第一个参数...

int main(int argc, char *argv[]){
    struct sockaddr_in Eaddr;
    Eaddr.sin_addr.s_addr=inet_addr(argv[1]);
    //other code to connect...
}
4

2 回答 2

0

问题inet_addr在于它指示错误返回INADDR_NONE,这与 IP 地址 255.255.255.255 一致。该inet_pton函数具有更好的错误报告:成功时返回 1,错误时返回 0 或 -1。

于 2014-11-05T09:33:34.783 回答
0

来自inet_addr() 手册页

   The inet_addr() function converts the Internet host address cp from
   IPv4 numbers-and-dots notation into binary data in network byte
   order.  If the input is invalid, INADDR_NONE (usually -1) is
   returned.  Use of this function is problematic because -1 is a valid
   address (255.255.255.255).  Avoid its use in favor of inet_aton(),
   inet_pton(3), or getaddrinfo(3), which provide a cleaner way to
   indicate error return.
于 2014-11-05T09:33:42.600 回答