我正在开发 Android 上的 RTP 流代码,我需要在端口(例如 5678)上接收RTP(UDP)数据包并从同一端口(5678)发送RTP 数据包。发送方代码和接收方代码位于不同的位置,因此单个套接字不能同时用于发送和接收。
为此,我需要使用bind()将发送方套接字和接收方套接字绑定到同一个端口。仅在 2 个套接字上使用 bind(),我在第二个 bind() 上出现错误。(如预期)
在对 StackOverflow 上的其他帖子进行搜索后,我发现了一个使用套接字选项SO_REUSEADDR的选项(SO_REUSEPORT在 Linux 上不可用)。
使用SO_REUSEADDR,我可以将两个套接字绑定到同一个端口。发送方套接字能够从该端口发送到()。但是接收器套接字停止显示任何可用于读取的传入数据包(select() + FD_ISSET()侦听方法)。如果 bind() 到其他端口,接收器套接字正常接收另一个端口上的传入数据包。
如此有效,它只有一个套接字能够使用共享端口,而另一个套接字只是被剥夺了任何数据包。
任何改进 SO_REUSEADDR 方法或任何其他方法的建议都将受到高度赞赏。