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));
        }
    }
}
复制代码

 

posted @   小y  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2020-09-21 【转】.NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
点击右上角即可分享
微信分享提示