​下载​

界面:

UDP服务端客户端_服务端

代码:form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace udpClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void ShowLog(string msg)
{
txtMsg.Text += msg + "\r\n";
}
UdpClient udpServ = null;
bool bsrvRun = false;
private void btnOpen_Click(object sender, EventArgs e)
{
if(udpServ==null)
{
int udpPort = 0;
if (!int.TryParse(txtSeverPort.Text, out udpPort))
{
MessageBox.Show("端口必须为数字");
return;
}
udpServ = new UdpClient(udpPort, AddressFamily.InterNetwork);
bsrvRun = true;
ReceiveMessage();
btnOpen.Enabled = false;
ShowLog("UDP服务端启动监听端口"+ txtSeverPort.Text);
}
}

private async void ReceiveMessage()
{
while (bsrvRun)
{
if (udpServ == null)
return;

try
{
UdpReceiveResult udpReceiveResult = await udpServ.ReceiveAsync();
string remoteip = udpReceiveResult.RemoteEndPoint.Address.ToString();

string message = Encoding.UTF8.GetString(udpReceiveResult.Buffer);
ShowLog("接收到"+ remoteip + "的Udp数据:" + message);
}
catch (Exception ex)
{
ShowLog("UDP客户端发生异常ReceiveMessage:" + ex.Message);
}
}
}

private void btnCloseSv_Click(object sender, EventArgs e)
{
bsrvRun = false;
if (udpServ == null)
return;

try
{
udpServ.Client.Shutdown(SocketShutdown.Both);
udpServ.Close();
udpServ = null;
}
catch
{
}
ShowLog("UDP服务端已关闭");
}

UdpClient udpCl = null;
private async void btnSend_Click(object sender, EventArgs e)
{
if(udpCl==null)
udpCl = new UdpClient(0, AddressFamily.InterNetwork);

byte[] buffer = Encoding.UTF8.GetBytes(txtSendData.Text);
await udpCl.SendAsync(buffer, buffer.Length, new IPEndPoint(IPAddress.Parse(txtRemotIP.Text), int.Parse(txtRemotPort.Text)));
ShowLog(string.Format("向服务端{0}:{1}发送UDP包:{2}", txtRemotIP.Text, txtRemotPort.Text, txtSendData.Text));
}
}
}