“已经在使用的地址”:我误解了UDP

时间:2011-01-22 03:55:03

标签: udp

两个或多个程序是否可以在单个端口上监控UDP包?我们有一个设备可以在端口55110上将RS-232数据转换为UDP,但看起来我只能在给定的计算机上运行一个侦听器。尝试第二个原因“地址已在使用中”。显然,计算机上还有一些其他程序正在侦听,因为REUSE => 1没有帮助。多个用户想要对数据进行采样。我为这么基本的问题道歉。

3 个答案:

答案 0 :(得分:3)

两个程序可以在同一个UDP端口上侦听,但两个程序都必须指定要允许共享该端口。以下是我的代码摘录,告诉操作系统执行此操作(在UDP套接字上调用bind()之前调用):

if (allowShared)
{
   const int trueValue = 1;
   setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &trueValue, sizeof(trueValue));
#ifdef __APPLE__   // MacOS/X requires an additional call also
   setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &trueValue, sizeof(trueValue));
#endif
}

答案 1 :(得分:1)

udp_reflector是一个简单的开源工具,用于解决使用udp数据时“已使用的地址”问题。

http://code.google.com/p/udp-reflector/

答案 2 :(得分:0)

即使你得到两个应用程序在同一个UDP端口上侦听,正如Steve-o的评论所说,单播数据包无论如何都不会被多路复用。这意味着每个数据包都将被发送到监听应用程序的一个

执行此操作的最佳方法是在端口55110上设置一个侦听器,该侦听器只会将每个传入的数据包重新发送到localhost上的其他端口列表,您的多个客户端应用程序正在侦听。