UDP 是无连接传输协议,所以不需要在发送和接收数据前建立远程主机连接.但是需要远程主机绑定一个端口进行监听是否是有发送端的IP和端口发送来的。发送端同样要绑定一个端口向远程IP地址的一个端口发送数据。
这里是一个基本实现,没有使用多线程以及异步等:
namespace UDPSendClient
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private UdpClient udpClient;
private IPEndPoint ipEndPoint;
public MainWindow()
{
InitializeComponent();
udpClient = new UdpClient(12345);
ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2112);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
byte[] bytes = new byte[1024];
bytes=Encoding.Default.GetBytes(this.txbMsg.Text);
udpClient.Send(bytes, bytes.Length, ipEndPoint);
}
}
}
namespace WpfUDPReceiveClient
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private UdpClient udpServer;
private IPEndPoint ipEndPoint;
private int _abortThread = 0;
public MainWindow()
{
InitializeComponent();
udpServer = new UdpClient(2112);
ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345);
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
}
private void HandleReceived()
{
byte[] data = null;
while(_abortThread==0)
{
data = udpServer.Receive(ref ipEndPoint);
MessageBox.Show(Encoding.Default.GetString(data));
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(HandleReceived);
thread.IsBackground = true;
thread.Start();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Interlocked.Exchange(ref _abortThread, 1);
}
}
}