我以这种方式从终端读取地址以将客户端连接到服务器,但是我被告知这不正确,因为我应该通过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...
}
答案 0 :(得分:0)
inet_addr
的问题在于它表示返回INADDR_NONE
的错误,该错误与IP地址255.255.255.255一致。 inet_pton
函数具有更好的错误报告:成功时返回1,错误时返回0或-1。
答案 1 :(得分:0)
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.