正在通过多播向我发送xml源,但我不知道多播组地址。我可以改用localhost吗?也就是说,
Socket socket =
new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
IPEndPoint ip = new IPEndPoint(IPAddress.Any,8888);
socket.Bind(ip);
socket.SetSocketOption
(SocketOptionLevel.IP,
SocketOptionName.AddMembership,
我有三个网络接口的计算机-一个真实的和两个VMWare虚拟的。我希望在端口1900上接收来自UPNP设备的多播消息。
我试图激活所有适配器并为每个适配器创建一个套接字。另外,我设置了套接字选项ReuseAddr,关闭ExclusiveAddrUse套接字选项,并将每个套接字添加到多播组239.255.255.250。我将套接字绑定到addr: InterfaceAddr:1900
问题是,只有一个套接字接收消息-一个VMWare网络套接字。netstat -a -o -p UDP >netstat.txt向我展示了我所有的套接字都在监听:
Proto Local address
我希望将UDP组播包发送到环回地址,并在其他应用程序中接收相同的包。所有测试都是在fedora core 17 Linux上完成的。
其思想是通过RTSP/HTTP或任何其他网络协议接收视频流,并在环回地址上多播它,这样我就可以使用VLC播放使用多播地址的流。抛开其他码率和受控组播问题不谈,我尝试读取一个视频文件并在环回设备上组播。但当试图在vlc上玩同样的游戏时,它不起作用。我可以看到数据包在wireshark中传输,但src ip取自我的默认网络接口(即,接口,这是我的默认网关)
我已经尝试了下面的命令
sudo ifconfig lo multicast
sudo ip route ad
我花了一些时间学习UDP连接,特别是Java中的多播套接字。
我能够在我的本地网络上创建一个简单的多播套接字“群聊”,但从那以后我一直在尝试将其扩展到我的本地网络之外。
为了实现这一点,我在路由器上端口转发了一个D类IP地址,以便允许其他人从我的网络外部访问我的组播组。
然而,当我尝试通过我的公网IP和指定的端口连接到我的“群聊”时(在端口转发过程中),我会收到以下错误消息...
Exception in thread "main" java.net.SocketException: Not a multicast address
at java.net.MulticastSo
我使用的是一个MulticastSocket,当我试图加入一个组时,当我在"localhost“ip上运行这个组时,它就无法工作了。然而,我发现这篇文章指出范围应该在224.0.0.1到239.255.255.254之间。当我用这个IP制作了一个InetAddress,并加入了这个小组时,它起了作用。请解释一下为什么这是必要的。
示例:
InetAddress group = InetAddress.getByName("localhost");
int port = 8888;
MulticastSocket socket = new MulticastSocket(