我对堆栈溢出很陌生,也是编程的初学者,希望在这里找到一个解决方案。
我的代码是用C++编写的,应该在带有linux操作系统的模块上运行。程序应该接收来自其他linux或windows系统的消息,然后根据消息的内容执行进一步的子程序并返回响应。windows程序也是用C++编写的。linux系统和windows系统通过交换机连接,交换机通过电力线适配器连接到家庭网络。在交换机设置以及linux系统中都启用并支持多播功能。
测试该功能的linux代码如下所示:
int createIPv4MulticastSocket(uint16_t socket_port, int allowReuseAdd
正在通过多播向我发送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,
我希望将UDP组播包发送到环回地址,并在其他应用程序中接收相同的包。所有测试都是在fedora core 17 Linux上完成的。
其思想是通过RTSP/HTTP或任何其他网络协议接收视频流,并在环回地址上多播它,这样我就可以使用VLC播放使用多播地址的流。抛开其他码率和受控组播问题不谈,我尝试读取一个视频文件并在环回设备上组播。但当试图在vlc上玩同样的游戏时,它不起作用。我可以看到数据包在wireshark中传输,但src ip取自我的默认网络接口(即,接口,这是我的默认网关)
我已经尝试了下面的命令
sudo ifconfig lo multicast
sudo ip route ad
我创建一个组&在方法Receive通过创建线程等待消息之前发送一个消息1行。这段代码工作得很好。我只想知道为什么我不应该在Send方法中添加这一行,以便在尝试向组发送一些东西之前将套接字加入到组中。
server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, MulticastOption);
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;