//创建一个Thread实例
private Thread thread1;
//创建一个UdpClient实例
private UdpClient udpReceive;
private UdpClient udpSend;
private byte[] bytes;
//private DialogResult result;
public myUdpClient()
{
InitializeComponent();
}
private void myUdpClient_Load(object sender, EventArgs e)
{
thread1 = new Thread(new ThreadStart(ReceiveMessage));
thread1.Start();
}
private void ReceiveMessage()
{
//在本机指定的端口接收
udpReceive = new UdpClient(8001);
//将套接字加入组播组
udpReceive.JoinMulticastGroup(IPAddress.Parse("127.0.0.1"), 50);
//接收从远程主机发送过来的信息
IPEndPoint iep= new IPEndPoint(IPAddress.Any, 0);
while (true)
{
//ref表示引用类型的 IPPoint实例接收消息
try
{
bytes = udpReceive.Receive(ref iep);
}
catch(SocketException e)
{
DialogResult result = MessageBox.Show("发送失败!");
}
string str = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
string message = "来自" + iep.ToString() + "的消息";
//显示消息 并以message为消息的标题
DialogResult res = MessageBox.Show(str, message);
}
}
private void BtnSend_Click(object sender, EventArgs e)
{
//初始化UdpClient
udpSend = new UdpClient();
//实际使用时应将127.0.0.1改为服务器的远程IP
IPAddress remoteIPAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint remoteIPEndPoint = new IPEndPoint(remoteIPAddress, 8002);
//将发送内容转换为字节数组
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(TbxMessage.Text);
//设置重传次数
int retry = 0;
while (true)
{
try
{
udpSend.Send(bytes, bytes.Length, remoteIPEndPoint);
break;
}
catch(SocketException se)
{
if (retry < 3)
{
retry++; continue;
}
else
{
DialogResult result = MessageBox.Show("发送失败!");
break;
}
}
}
//清空TbxMesage中的内容
TbxMessage.Clear();
//光标还原
TbxMessage.Focus();
//关闭UdpClient
}
private void myUdpClient_FormClosing(object sender, FormClosingEventArgs e)
{
//关闭连接
udpReceive.Close();
udpSend.Close();
//终止线程
thread1.Abort();
}
}
}