socket - 从终端读取IP地址

时间:2014-11-05 09:19:56

标签: c sockets ip inet

我以这种方式从终端读取地址以将客户端连接到服务器,但是我被告知这不正确,因为我应该通过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...
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

来自inet_addr() man page

   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.