gpt4 book ai didi

sockets - 服务器与客户端套接字(低级细节)?

转载 作者:行者123 更新时间:2023-12-03 15:05:47 24 4
gpt4 key购买 nike

一般编程:在服务器套接字 accept() 方法中究竟发生了什么。在低级别服务器套接字与客户端套接字有何不同?

最佳答案

在低级别套接字只是套接字,无论它们是在服务器还是客户端应用程序中使用。两者的区别在于每种应用程序所做的系统调用。

服务器套接字将调用 bind()与端口相关联。他们希望与一个端口相关联,以便其他程序知道从哪里到达他们。客户端套接字可以调用 bind()但几乎从不这样做,因为没有太多意义。如果套接字不调用 bind()操作系统只会为其选择一个临时端口,这对客户端来说很好,因为他们正在调用;没有人需要调用他们。

服务器套接字调用 listen() .这在其他答案中得到了很好的解释。

服务器套接字调用 accept()我认为这是你问题的症结所在,因为起初它有点神秘。要掌握的重要一点是,在调用 accept()内核将传回一个新的套接字。它现在与原始监听套接字分开,是您的服务器将用来与其对等方通信的。

理解监听套接字如何在接受的连接执行其操作时继续监听的关键在于理解 tcp 连接依赖于 (1) 本地地址 (2) 本地端口 (3) 外部地址 (4) 的 4 元组外国港口。这些定义了一个独特的连接。之前 accept()传回新的套接字,内核使用这些值来创建各种结构,以便与 tcp/ip 堆栈协作,该元组的所有流量都将进入连接的套接字。即使您的服务器可能与本地地址 192.168.1.100 端口 80 有一千个连接,但地址和端口的客户端组合将始终不同,因此元组始终是唯一的。

关于sockets - 服务器与客户端套接字(低级细节)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/774571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com