当前位置: 首页 > 知识库问答 >
问题:

TCP:两个不同的套接字可以共享一个端口吗?

马亮
2023-03-14

这可能是一个很基本的问题,但它使我感到困惑。

两个不同连接的套接字可以共享一个端口吗?我正在编写一个应用服务器,它应该能够处理100K以上的并发连接,我们知道一个系统上可用的端口数量大约是60K(16bit)。一个连接的套接字被分配给一个新的(专用的)端口,因此这意味着并发连接的数量受到端口数量的限制,除非多个套接字可以共享同一个端口。所以问题是。

共有1个答案

任伟
2023-03-14

服务器套接字监听单个端口。该服务器上所有已建立的客户端连接都与该连接的服务器端的相同侦听端口相关联。通过客户端和服务器端IP/端口对的组合来唯一标识已建立的连接。同一服务器上的多个连接可以共享相同的服务器端IP/端口对,只要它们与不同的客户端IP/端口对相关联,服务器就能够处理可用系统资源允许的尽可能多的客户端。

在客户端,新的出站连接通常使用随机的客户端端口,在这种情况下,如果在短时间内进行大量连接,则可能会耗尽可用的端口。

 类似资料:
  • 我有大约60个套接字和20个线程,我想确保每个线程每次都在不同的套接字上工作,所以我根本不想在两个线程之间共享同一个套接字。 在我的类中,我有一个后台线程,它每60秒运行一次并调用方法。在方法中,我迭代我拥有的所有套接字,然后通过调用类的方法开始逐个ping它们,并根据响应将它们标记为活的或死的。在方法中,我总是需要迭代所有套接字并ping它们以检查它们是活的还是死的。 现在,所有读取器线程将并发

  • 是否有一种简单的(非迭代的)方法来绑定两个套接字,一个TCP和一个UDP,以保证它们都具有相同的临时端口? 我有一个简单的服务器,最初通过TCP连接,但也通过UDP传输。我不想在连接后从客户端发送UDP数据包,只是为了让服务器发现客户端的UDP临时端口。除非必要,否则我不想通过初始传输控制协议消息发送端口号。 现在,我在TCP套接字上的getsockname之后显式绑定客户端UDP套接字的端口,以

  • 假设有一个多线程服务器将数据写入同一端口上的两个不同套接字,其中一个专用线程处理每个套接字。两个线程是否可以同时写入各自的套接字?(所谓“同时”,我指的是真正的同时性,而不仅仅是并发交错。)或者,套接字共享同一端口的事实是否意味着强制执行互斥? 一般来说,我不清楚如何在两个任意I/O流之间共享资源。我知道两个线程不能同时写入磁盘,因为磁盘本身是共享资源。然而,在套接字和端口的情况下,我没有类似的物

  • > 当同一主机上的两个进程使用网络套接字通信时,它们的套接字必须使用不同的端口吗? 我想是的,因为套接字由IP地址和端口号标识。如果进程的套接字使用相同的端口,则无法区分它们的套接字,对吗? 但是一个主机可以有多个网络接口,所以有多个IP地址。同一个主机上的多个网络接口是否可以共享一个端口,从而使两个套接字共享同一个端口? 例如,SSH本地端口转发由以下选项指定: 然后本地主机(SSH客户端运行的

  • 我使用jsPlumb允许用户构建图形。我允许用户拖动这些元素,所以我为每个endpoint使用锚集合,让jsPlumb在建立连接时从该集合中为我选择“最佳”锚。我遇到的问题是,我可能有多达十几个连接来自任何给定的endpoint,所以当许多人最终选择相同的“最佳”锚点时,这些连接将在视觉上分散注意力——在图中造成拥塞的外观。为了解决这个问题,我想告诉jsPlumb限制任何两个连接在endpoint

  • 我有一个监听两个不同端口的TCP服务器。我创建了两个不同的套接字,一个在端口8888上,一个在端口6634上。我监听这些端口,然后我在FD_SET中添加两个套接字,并将它们传递给Select()函数...当套接字准备好读取时,我检查FD_ISSET,看看哪个端口上有消息要读取。 不管怎样,当我连接到8888端口时,构思是成功的,我可以向服务器发送和接收。。。当我在客户端ctrl c时,选择函数再次