Sockets 解决套接字编程中的问题
从介绍Tanenbaum计算机网络中的Berkeley Sockets API开始Sockets 解决套接字编程中的问题,sockets,network-programming,Sockets,Network Programming,从介绍Tanenbaum计算机网络中的Berkeley Sockets API开始 在服务器端: 通过SOCKET原语新建的套接字没有网络 地址。这些是使用BIND原语分配的。每年一次 服务器已将地址绑定到套接字,远程客户端可以连接到该套接字 它 没有套接字调用的原因是直接创建地址 一些进程关心它们的地址(例如,它们有 多年来一直使用同一个地址,每个人都知道这一点 地址),而其他人则没有 为什么不让套接字调用直接创建地址, 因为一些进程关心它们的地址,而另一些进程关心它们的地址 你不知道吗 在客
SOCKET
原语新建的套接字没有网络
地址。这些是使用BIND
原语分配的。每年一次
服务器已将地址绑定到套接字,远程客户端可以连接到该套接字
它
没有套接字调用的原因是直接创建地址
一些进程关心它们的地址(例如,它们有
多年来一直使用同一个地址,每个人都知道这一点
地址),而其他人则没有
为什么不让套接字
调用直接创建地址,
因为一些进程关心它们的地址,而另一些进程关心它们的地址
你不知道吗
SOCKET
原语创建,但由于
使用的地址对服务器不重要
为什么不需要BIND
,因为使用的地址无关紧要
到服务器bind()
。因此,将地址放入套接字创建API将是毫无意义的
不让套接字调用直接创建地址的原因是,一些进程关心它们的地址(例如,它们已经使用同一地址多年,每个人都知道这个地址),而其他进程则不关心它们的地址
我不同意这种奇怪的说法
为什么不需要绑定,因为使用的地址与服务器无关
这是另一种奇怪的说法。连接的套接字的源地址可以通过静态IP路由表自动确定。只要客户机可以连接到服务器,symmetry就可以保证服务器可以在同一个连接上发送回客户机,因此客户机的实际源地址对cleint或服务器应用程序都不重要。当然,这对TCP很重要,否则它就不存在了
为什么不让套接字调用直接创建地址,因为有些进程关心它们的地址,而其他进程则不关心它们的地址
基本上,因为严格的客户端(例如web浏览器)不关心其本地IP地址/端口是什么。通过不需要SOCKET调用来创建/分配地址,它可以允许BIND调用实际上永远不会发生在客户机上下文中(通常不重要),而是发生在服务器上下文中(非常重要)
为什么不需要绑定,因为使用的地址与服务器无关
这与上面答案的第一部分有关。一个套接字只需要绑定到一个特定的地址和端口,就可以让某些东西接触并连接到它。在许多情况下(例如web浏览器),没有任何理由可以连接到它-它只需要能够连接到其他系统(服务器)
为了使它成为一个一般原则,您只需要在其他东西需要连接到某个地址时将套接字绑定到该地址。如果套接字只连接到其他对象,则无需绑定它。谢谢。客户机不需要有自己的地址,那么服务器如何找到客户机来返回客户机请求的内容呢?客户机需要自己的地址,但不需要任何特定的地址。当客户机尝试连接到服务器时,其TCP/IP堆栈将在此时确定要绑定的最佳IP地址和可用TCP端口。因此,客户仍然会得到一个地址,但不是它关心的地址。谢谢。客户机不需要有自己的地址,那么服务器如何找到客户机来返回客户机请求的内容呢?