我正在使用Android上的RTPstream媒体代码,我需要在端口上接收 RTP( UDP )数据包(如5678),并从同一端口 (5678) 发送 RTP数据包。 发送者代码和接收者代码位于不同的位置,因此单个套接字不能用于发送和接收。
为了实现这一点,我需要绑定发件人套接字和接收器套接字使用bind()相同的端口。 用2个套接字上的bind(),我得到第二个bind()的错误。 (如预期)
在StackOverflow的其他post上search后,我发现使用套接字选项SO_REUSEADDR ( SO_REUSEPORT在Linux上不可用)的选项。
与SO_REUSEADDR ,我能够绑定()两个套接字到同一个端口。 发件人套接字能够从这个端口发送()。 但是接收器sockets停止显示任何可用的读取数据包( select() + FD_ISSET()方法)。 如果将bind()绑定到其他端口,receiver socket会正常收到另一个端口上的传入数据包。
Nginx:连接()到unix:/var/run/PHP7.0-fpm.sock失败(2:没有这样的文件或目录)
为什么要closures一个死的TCP套接字影响另一个打开的TCP套接字?
SocketServer在Linux上不起作用
为什么如果socket通信的另一端closures,recv()不会设置errno?
如此有效,它的唯一一个套接字就能够使用共享端口,而其他套接字只是被剥夺了任何数据包。
任何改进SO_REUSEADDR方法或任何其他方法的build议将受到高度赞赏。
Socket.Bind和IP源路由,具有多个本地networking接口
在Linux上“接受”fd上的setsockopt
将multithreadingnetworking服务器从Unix移植到Windows
有没有办法获得unix套接字连接的另一端的uid
如何做“netstat -p”,但速度更快?
您不需要在同一个端口上绑定两个套接字。 Android DatagramSocket是bidrectional套接字。 只需创建一个套接字并使用其receive和send方法即可。 如果这是一个问题,你可以使用它们从不同的线程( receive和send )。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。