2013-04-11 90 views
2

在c中的套接字编程中,为什么要在服务器程序中指定套接字地址? 我无法理解为什么在服务器程序中指定套接字地址,因为我们在客户端程序中指定的套接字地址,需要在服务器程序中指定什么。在c中的套接字编程中,为什么要在服务器程序中指定套接字地址?

下面是代码:

bzero((char *)&serv_addr,sizeof(serv_addr)); 

serv_addr.sin_family=AF_INET; 

serv_addr.sin_addr.s_addr=inet_addr(argv[1]); 

serv_addr.sin_port=htons(atoi(argv[2])); 
+0

* Posix *(或BSD套接字)中的套接字编程多于* C *中的套接字编程;我建议读一本关于Posix网络编程的好书。如果在Linux上,请阅读http://advancedlinuxprogramming.com/ – 2013-04-11 11:22:49

回答

1

你不,你可以使用INADDR_ANY而不是真正的地址,但是当你有你的机器上有多个网络接口,它可以很有用。

3

大多数服务器不显式指定套接字地址,他们使用INADDR_ANY(如@ybo地址)。

服务器可能指定地址的原因是控制客户端到达哪个接口。例如,您可以绑定到地址127.0.0.1(localhost)以确保客户端仅在本地计算机上运行,​​从而降低与远程连接相关的安全风险。您也可以显式绑定到外部端口,以便更好地使用沙箱远程客户端。

0

您的计算机可能有很多IP地址。 (即使127.0.0.1可以被认为是一个独立于你的“真实”IP)。在服务器套接字上,你可以选择你正在“监听”的这些地址中的哪一个。按照上面的例子,我认为将服务器套接字绑定到127.0.0.1意味着您只能在本地连接到该服务器程序。

1

其实相同的答案休息,但换句话说:

服务器通常只使用1个公网IP地址。并且还有一个或多个内部IP地址(如localhost 127.0.0.1和lan 192.168.0.1)。

但一台服务器轻松也可以有多个公网IP地址。

服务器甚至需要多个公共IP地址,如果它将在端口443上托管多个HTTPS证书,因为每个服务器都绑定到特定的IP地址。

收听时,您可以监听1个特定的IP地址,并从其他IP地址从而则会忽略流量。您甚至可以让其他应用程序在其他IP地址上使用相同的端口号。

如果出于安全考虑,您只希望应用程序从本地主机连接(例如,客户端和服务器在同一台机器上),你最好只在127.0.0.1听,而不是所有IP的。