C# UdpClient类实现UDP通信测试

76 篇文章 1 订阅

实现的效果如下截图:

创建2个UDP 客户端,直接可以直接信息进行交互。主要使用UdpClient类来实现。

XAML 设计:

<Grid>

        <DockPanel LastChildFill="True">

            <DockPanel DockPanel.Dock="Bottom" Margin="10">

                <TextBlock DockPanel.Dock="Left" Margin="5" >发送信息:</TextBlock>

                <Button x:Name="btnSendMessage" Click="btnSendMessage\_Click" DockPanel.Dock="Right" Margin="5" Padding="3">发送</Button>

                <TextBox x:Name="txtSendMsg" Margin=" 5 2 5 2"></TextBox>

            </DockPanel>

            <TextBox x:Name="txtReceiveMsg" Margin="5" TextWrapping="Wrap" DockPanel.Dock="Top" HorizontalScrollBarVisibility="Visible"></TextBox>

        </DockPanel>

    </Grid>

后台代码:

添加引用

using System.Net.Sockets;

using System.Net;

public partial class MainWindow : Window

{

    public IPEndPoint localEndPoint { get; set; }

    public IPEndPoint remoteEndPoint { get; set; }

    private UdpClient Client;

    private IPAddress ip;

    public MainWindow()

    {

        InitializeComponent();

        //获取本机所有IPV4

        IPAddress\[\] ips = Dns.GetHostAddresses(Dns.GetHostName());

        foreach (var v in ips)

        {

            //判断是否为IPv4

            if (v.AddressFamily == AddressFamily.InterNetwork)

            {

                ip = v;

                break;

            }

        }

        //因为在本机上测试,所以IP是相同的,只是交换一个端口位置,就可以创建Client2

        localEndPoint = new IPEndPoint(ip, 8001);

        remoteEndPoint = new IPEndPoint(ip, 8002);

    }



    private void Window\_Loaded(object sender, RoutedEventArgs e)

    {

        Client = new UdpClient(localEndPoint);

        AddInfo("监听IP和端口号:{0}\\n", localEndPoint);

        Task.Run(() => ReceiveDataAsync());

    }



    private async void ReceiveDataAsync()

    {

        while (true)

        {

            var result = await Client.ReceiveAsync();

            string s = Encoding.Unicode.GetString(result.Buffer);

            AddInfo("来自{0}:{1}\\n", result.RemoteEndPoint, s);

        }

    }

    private async void btnSendMessage\_Click(object sender, RoutedEventArgs e)

    {

        string s = txtSendMsg.Text;

        byte\[\] data = Encoding.Unicode.GetBytes(s);

        await Client.SendAsync(data, data.Length, remoteEndPoint);

        AddInfo("向{0} 发送{1}\\n", remoteEndPoint, s);

    }



    private void AddInfo(string format, params object\[\] args)

    {

        txtReceiveMsg.Dispatcher.Invoke(() =>

        {

            txtReceiveMsg.Text += string.Format(format, args);

        });

    }

}

创建Client2,只需在localEndPoint和remoteEndPoint的端口即可。

测试正常,可以相互收发信息。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysh05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值