Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 解决套接字编程中的问题_Sockets_Network Programming - Fatal编程技术网

Sockets 解决套接字编程中的问题

Sockets 解决套接字编程中的问题,sockets,network-programming,Sockets,Network Programming,从介绍Tanenbaum计算机网络中的Berkeley Sockets API开始 在服务器端: 通过SOCKET原语新建的套接字没有网络 地址。这些是使用BIND原语分配的。每年一次 服务器已将地址绑定到套接字,远程客户端可以连接到该套接字 它 没有套接字调用的原因是直接创建地址 一些进程关心它们的地址(例如,它们有 多年来一直使用同一个地址,每个人都知道这一点 地址),而其他人则没有 为什么不让套接字调用直接创建地址, 因为一些进程关心它们的地址,而另一些进程关心它们的地址 你不知道吗 在客

从介绍Tanenbaum计算机网络中的Berkeley Sockets API开始

  • 在服务器端:

    通过
    SOCKET
    原语新建的套接字没有网络 地址。这些是使用
    BIND
    原语分配的。每年一次 服务器已将地址绑定到套接字,远程客户端可以连接到该套接字 它

    没有
    套接字调用的原因是直接创建地址
    一些进程关心它们的地址(例如,它们有
    多年来一直使用同一个地址,每个人都知道这一点
    地址),而其他人则没有

    为什么不让
    套接字
    调用直接创建地址, 因为一些进程关心它们的地址,而另一些进程关心它们的地址 你不知道吗

  • 在客户端:

    现在让我们看看客户端。这里也必须首先安装一个插座 使用
    SOCKET
    原语创建,但由于 使用的地址对服务器不重要

    为什么不需要
    BIND
    ,因为使用的地址无关紧要 到服务器

  • 为什么不让套接字调用直接创建地址,因为有些进程关心它们的地址,而其他进程则不关心它们的地址

    因为他们就是这样设计的。侦听套接字不需要目标地址,在大多数情况下,它们也不需要源地址(INADDR_ANY);而且大多数客户端套接字也不需要特定的源地址。在大多数情况下,客户端根本不需要调用
    bind()
    。因此,将地址放入套接字创建API将是毫无意义的

    不让套接字调用直接创建地址的原因是,一些进程关心它们的地址(例如,它们已经使用同一地址多年,每个人都知道这个地址),而其他进程则不关心它们的地址

    我不同意这种奇怪的说法

    为什么不需要绑定,因为使用的地址与服务器无关

    这是另一种奇怪的说法。连接的套接字的源地址可以通过静态IP路由表自动确定。只要客户机可以连接到服务器,symmetry就可以保证服务器可以在同一个连接上发送回客户机,因此客户机的实际源地址对cleint或服务器应用程序都不重要。当然,这对TCP很重要,否则它就不存在了

    为什么不让套接字调用直接创建地址,因为有些进程关心它们的地址,而其他进程则不关心它们的地址

    基本上,因为严格的客户端(例如web浏览器)不关心其本地IP地址/端口是什么。通过不需要SOCKET调用来创建/分配地址,它可以允许BIND调用实际上永远不会发生在客户机上下文中(通常不重要),而是发生在服务器上下文中(非常重要)

    为什么不需要绑定,因为使用的地址与服务器无关

    这与上面答案的第一部分有关。一个套接字只需要绑定到一个特定的地址和端口,就可以让某些东西接触并连接到它。在许多情况下(例如web浏览器),没有任何理由可以连接到它-它只需要能够连接到其他系统(服务器)


    为了使它成为一个一般原则,您只需要在其他东西需要连接到某个地址时将套接字绑定到该地址。如果套接字只连接到其他对象,则无需绑定它。

    谢谢。客户机不需要有自己的地址,那么服务器如何找到客户机来返回客户机请求的内容呢?客户机需要自己的地址,但不需要任何特定的地址。当客户机尝试连接到服务器时,其TCP/IP堆栈将在此时确定要绑定的最佳IP地址和可用TCP端口。因此,客户仍然会得到一个地址,但不是它关心的地址。谢谢。客户机不需要有自己的地址,那么服务器如何找到客户机来返回客户机请求的内容呢?