套接字 TCP 服务器

标签 sockets tcp network-connection

我有关于网络连接的问题

例如,一个TCP服务器同时支持N个连接,每个连接属于其他客户端主机。问题是服务器需要多少个套接字?

谢谢

最佳答案

我认为这是一个有效的问题,但不明白为什么它被否决了。

在我继续之前,必须先明确一个重要的区别。套接字是文件描述符,而端口是套接字的“标识符”。文件描述符/套接字由应用程序拥有,因此端口可以被视为将连接/数据包路由到正确应用程序的一种方式。

例如,Web 服务器(或任何其他基于 TCP 的服务器)的工作方式是,您有一个绑定(bind)到端口(例如 80)的监听套接字。当客户端连接到服务器时,操作系统会自动创建一个新的套接字(该套接字是由例如accept()返回的套接字)。该套接字与监听套接字绑定(bind)到相同的本地 IP 和端口,但具有不同的远程 IP/端口。操作系统存储此映射并将属于此映射的数据包路由到新套接字。

所以你的问题的答案是只需要一个监听套接字,但是当客户端连接时将创建新的套接字(并在断开连接时删除)。应用程序可以创建的套接字(文件描述符)的限制由操作系统控制。

关于套接字 TCP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771093/

相关文章:

tcp - 是否有一种算法可以对捕获的 session 中使用的 TCP 拥塞控制算法进行指纹识别?

javascript - Chrome 操作系统,通过 Chrome 扩展程序快速判断是否有互联网连接?

java - NIO 阻塞写入不起作用

java - 组播数据开销?

linux - 在Linux中是否可以有从同一客户端端口到不同服务器端口的两个连接?

python - 读取时非阻塞 Python 套接字的超时值是多少?

java.net.SocketException : Broken pipe while accessing mysql on cloud server

android - 如何在Android上检查互联网访问(发送和接收数据是否成功)?

C 套接字和 openssl (RSA)

java - 使用套接字发送浮点值(从 Java 应用程序到 C#)