首页 文章

如何将2个UDP套接字绑定到同一个端口,一个用于接收,另一个用于发送

提问于
浏览
1

我正在研究Android上的RTP流代码,我需要端口上的 receive RTP( UDP )数据包(比如5678)和来自 same port (5678)的 send RTP数据包 . 发件人代码和接收器代码位于不同的位置,因此单个插槽不能用于发送和接收 .

为实现此目的,我需要使用 bind() 将发送方套接字和接收方套接字绑定到同一端口 . 只有2个套接字上的bind(),我在第二个bind()上得到错误 . (如预期的那样)

在StackOverflow上搜索其他帖子后,我发现了一个使用socket-option SO_REUSEADDR 的选项( SO_REUSEPORT 在Linux上不可用) .

使用 SO_REUSEADDR ,我能够将两个套接字绑定到同一个端口 . 发送方套接字能够从此端口发送到() . 但接收器套接字停止显示任何可用于读取的传入数据包( select() FD_ISSET() 监听方法) . 如果bind()ed到其他端口,接收器套接字通常会在另一个端口上接收传入的数据包 .

如此有效,它唯一的一个套接字能够使用共享端口,而其他套接字只是被剥夺了任何数据包 .

任何改进SO_REUSEADDR方法或任何其他方法的建议都将受到高度赞赏 .

1 回答

  • 2

    您不需要在同一端口上绑定两个套接字 . Android DatagramSocket是bidrectional socket . 只需创建一个套接字并使用其 receivesend 方法 . 如果这是一个问题,您可以从不同的线程( receivesend )使用它们 .

相关问题