双网卡分别接收和发送组播

来源:互联网 发布:linux 任务 暂停 重启 编辑:程序博客网 时间:2024/04/29 07:37

有两套相同的系统(内部IP全部相同),使用两个设备(双网卡)分别接入两套系统,实现两套系统间组播信息互传

SystemA: 192.168.11.26(内网) 192.168.12.26(外网)

现在使用192.168.11.26接收内网的组播,并且使用192.168.12.26发出去

接收(此接收会产生丢包现象,测试程序没有处理):

private string iIp = ConfigurationManager.AppSettings["iIp"];private string oIp = ConfigurationManager.AppSettings["oIp"];

private void StartReceive()        {            try            {                IPEndPoint ip = new IPEndPoint(IPAddress.Parse(iIp), port);                Udp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);                Udp.Bind(ip);                Udp.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(ipStr), IPAddress.Parse(iIp)));                IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);                EndPoint remote = (EndPoint)sender;                byte[] data;                while (isReceive)                {                    try                    {                        data = new byte[1024];                        int receiveLength = Udp.ReceiveFrom(data, ref remote);                        DoReceive(data, receiveLength);                    }                    catch (ThreadAbortException abort)                    {                        return;                    }                    catch (Exception ex)                    {                        continue;                    }                }            }            catch (Exception ex)            {                Error(ex);            }        }
发送:

private void SendMulticast(byte[] data)        {            using (Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))            {                IPEndPoint ipLocal = new IPEndPoint(IPAddress.Parse(oIp), MulticastPort);                server.Bind(ipLocal);                IPEndPoint ip = new IPEndPoint(IPAddress.Parse(MulticastIP), MulticastPort);                server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(ipStr), IPAddress.Parse(oIp)));                server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 1);                server.Connect(ip);                server.SendTo(data, data.Length, SocketFlags.None, ip);            }        }



0 0
原创粉丝点击