【发布时间】:2014-02-17 11:25:42
【问题描述】:
在socket编程中是做什么的
servaddr.sin_addr.s_addr=INADDR_ANY;
实际上在一个客户端程序中做什么? INADDR_ANY 是什么意思?
我也在网上找到了另一个来源
servaddr.sin_addr.s_addr=inet_addr(argv[1]);
这一步是做什么的?我想我必须输入服务器 ip 作为该客户端想要连接的参数。我说的对吗?
【问题讨论】:
在socket编程中是做什么的
servaddr.sin_addr.s_addr=INADDR_ANY;
实际上在一个客户端程序中做什么? INADDR_ANY 是什么意思?
我也在网上找到了另一个来源
servaddr.sin_addr.s_addr=inet_addr(argv[1]);
这一步是做什么的?我想我必须输入服务器 ip 作为该客户端想要连接的参数。我说的对吗?
【问题讨论】:
在服务器上,INADDR_ANY 是 bind 的一个参数,它告诉套接字侦听所有可用的接口。
在客户端上,connect 的参数告诉客户端要连接到哪个服务器,但除了作为指定“此主机”的替代方式之外似乎没有任何意义。
(在这两种情况下,它实际上是一个指向实际传递的struct sockaddr_in 的指针,IP adderss 是该结构的sin_addr.s_addr 字段。正式的函数规范实际上指定了一个struct sockaddr *)
【讨论】:
argv[0] 是程序本身的名称,argv[1] 因此是第一个提供的参数。
INADDR_ANY 参数只有在操作学习套接字编程时才有意义,其中客户端和服务器恰好位于同一主机中。另外this 评论说,给 INADDR_ANY 一个论点 connect 不是标准做法,尽管没有提供证实该主张的链接。