18,356
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace UDP同步组播
{
public partial class Form1 : Form
{
EndPoint GroupEP;
IPAddress LocalIP, GroupIP;
Socket LocalSocket;
byte[] ReceiveBuffer = new byte[1024];
/// <summary>
/// 绑定事件
/// </summary>
public Form1()
{
InitializeComponent();
//定义本地接口
IPAddress[] IPS = Dns.GetHostAddresses(Dns.GetHostName());
foreach (IPAddress myhost_ip in IPS)
{
if (myhost_ip.AddressFamily == AddressFamily.InterNetwork)
{
LocalIP = myhost_ip;
break;
}
}
//创建本地套接字并绑定本地接口
LocalSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
LocalSocket.Bind((EndPoint)new IPEndPoint(LocalIP,5033));
//指定远端接口
GroupIP = IPAddress.Parse("224.168.101.2");
//制定组播地址接口
GroupEP = (EndPoint)new IPEndPoint(GroupIP,5033);
}
#region 发送事件
private void SendBtn_Click(object sender, EventArgs e)
{
//配置组播选项
MulticastOption MO = new MulticastOption(GroupIP, LocalIP);
//预定组播地址
LocalSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, MO);
LocalSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface,
(int)IPAddress.HostToNetworkOrder(0));
//发送数据
LocalSocket.SendTo(Encoding.UTF8.GetBytes(ContentBox.Text), GroupEP);
//退出组播地址
LocalSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.DropMembership, MO);
//信息显示
MsgList.Items.Add(string.Format("发送:{0}({1})",ContentBox.Text,
DateTime.Now.ToString("yy-MM-dd h:m:s")));
}
#endregion
#region 接收事件
private void ReceiveBtn_Click(object sender, EventArgs e)
{
//配置组播选项
MulticastOption MO = new MulticastOption(GroupIP, LocalIP);
//预定组播地址
LocalSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, MO);
LocalSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface,
(int)IPAddress.NetworkToHostOrder(0));
//接收数据
IPEndPoint remoteIEP = new IPEndPoint(IPAddress.Any, 0);
EndPoint remoteEP = (EndPoint)remoteIEP;
int rf = LocalSocket.ReceiveFrom(ReceiveBuffer, ref remoteEP);
//退出组播地址
LocalSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.DropMembership, MO);
//信息显示
MsgList.Items.Add(string.Format("接受:{0}({1})",Encoding.UTF8.GetString(ReceiveBuffer,0,rf).Trim(),
DateTime.Now.ToString("yyyy-MM-dd h:m:s")));
}
#endregion
private void Form1_Load(object sender, EventArgs e)
{
}
}
}