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

确保创建两个套接字(一个TCP和一个UDP)时临时端口相同

穆歌者
2023-03-14

是否有一种简单的(非迭代的)方法来绑定两个套接字,一个TCP和一个UDP,以保证它们都具有相同的临时端口?

我有一个简单的服务器,最初通过TCP连接,但也通过UDP传输。我不想在连接后从客户端发送UDP数据包,只是为了让服务器发现客户端的UDP临时端口。除非必要,否则我不想通过初始传输控制协议消息发送端口号。

现在,我在TCP套接字上的getsockname之后显式绑定客户端UDP套接字的端口,以发现操作系统分配的临时端口。它还没有失败,但感觉很脆弱。

编辑:为了澄清,当前实现假设操作系统永远不会为UDP套接字已经使用的TCP套接字分配临时端口。

共有1个答案

杜俭
2023-03-14

将一个绑定到(0),然后获取本地端口值,然后将另一个绑定到该值。如果失败(端口已分配),请关闭第一个插槽,冲洗,然后重复。

没有别的办法,尽管它“感觉”脆弱。但我不明白为什么你需要它们是一样的。如果它们是昙花一现的,没有人知道它们是什么,你必须以某种方式为它们做广告。

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

  • 当我在客户端使用下一段代码时: 我得到一个例外,它只允许使用单个套接字地址。但在服务器端我使用: 我需要编写一个客户端,可以在同一端口的TCP和UDP协议上工作。TCP-通用命令,UDP-语音流。如何做到这一点?

  • 我正在处理一个应用程序,它将通过UDP从另一个本地服务接收RTP数据包。在协议的早期,我接收到一个带有IP地址的消息,我将从该IP地址接收这些RTP数据包,但端口号将被给出为0(零)...我将使用临时端口打开我的UDP套接字。我对给定消息的响应将包含我打开的实际端口,这样发送者就可以知道将数据包定向到哪里。 我的网络库是用实现套接字的。在哪里可以找到关于如何打开这样一个套接字而不指定非零端口(即使

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

  • 问题内容: 到目前为止,我有以下代码: 但这给了我 将varchar值’## show’转换为数据类型int时,转换失败。 我想要实现的是每次执行查询时都创建一个表## show + random number。 例子 : 用@bluefeet所说的内容进行编辑,并找到了一种使用以下方法创建表的方法 但是如何调用或插入此表? 问题答案: 由于要将参数添加到字符串中,因此需要将其强制转换为varch

  • 我基本上想要一个EC2,一个接口在公共子网,一个在私有子网。我应该能够通过公共接口从外界SSH,私有网络将用于与私有网络中的数据库通信。 在地形上。。。 我在该 VPC 中创建了一个 VPC,两个子网(一个公共子网,一个私有子网)。 创建了一个互联网网关,即 VPC 中的路由表,其路由为 0.0.0.0/0 至 IGW 已在与公有子网和路由表之间创建路由关联。 已创建一个 EC2 实例,其中一个接