c#udp通讯之服务器及客户端

Udp通讯之服务器及客户端
我坚信付出不一定有回报,但是不付出绝对没有回报,给我选,我毫无办法,只能选择付出,不为别的,只为看到明天冉冉东升的朝阳。废话少说,先从服务器说起
--------udp通讯之服务器
在这里插入图片描述

Udp通讯连接非常之简单

先声明几个通用变量

    UdpClient client = null;
    string receiveString = null;
    byte[] receiveData = null;
    IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);

然后开启服务器,进行数据接收

private void button1_Click(object sender, EventArgs e)
    {
        //
       displayMsg("服务器启动完毕,等待接收数据。。。");
        Thread td1 = new Thread(()=> {
            while (true)
            { 
                receiveData = client.Receive(ref remotePoint);//接收数据
                receiveString = Encoding.Default.GetString(receiveData);
                displayMsg(remotePoint+"接收到的数据为:" + receiveString);
            }
        });
        td1.IsBackground = true;
        td1.Start();
        button1.Enabled = false;
    }

然后向客户端发送数据

    private void button2_Click(object sender, EventArgs e)
    {
        //发送数据
        if (!button1.Enabled&&client!=null)
        {
            string msg = textBox1.Text.Trim();
            byte[] buffer = Encoding.Default.GetBytes(msg);
            client.Send(buffer,buffer.Length,remotePoint);
            msg = remotePoint.ToString() + "发送的数据为:" + msg;
            displayMsg(msg);
        }
    }

最后做一个数据输出到文本的功能

    private void displayMsg(string msg)
    {
        msgDisplay.Invoke(new Action<string>((s)=> {
            msgDisplay.AppendText(s+"\r\n");

        }),msg);
    }

大功告成。。。。

--------服务器来了,那就再来一个客户端吧
在这里插入图片描述

老规矩,先来几个公共变量吧

    UdpClient client = null;
    IPEndPoint remotePoint;
    bool flag = false;

下面就该数据发送了

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
                
                byte[] sendData = Encoding.Default.GetBytes(textBox2.Text.Trim());
                client.Send(sendData, sendData.Length, remotePoint);
                string msg = "发送的数据为:" + remotePoint + "-->" +client+":"+ Encoding.Default.GetString(sendData);
                msgDisplay(msg);
            //    msgDisplay(Encoding.Default.GetString(client.Receive(ref remotePoint)));
            //flag = true;
        }
        catch(Exception ex)
        {
            msgDisplay(ex.ToString());
        }
    }

//在就是一个数据循环接收的程序

private void button2_Click(object sender, EventArgs e)
    {
        msgDisplay("数据循环接收开启。。。");
        Thread td2 = new Thread(()=> {
            while (true)
            {
                try
                {
                    msgDisplay(Encoding.Default.GetString(client.Receive(ref remotePoint)));
                }
                catch
                {
                    Thread.Sleep(1000);
                    msgDisplay("服务器未开启,");
                   // break;
                }
            }

        });
        td2.IsBackground = true;
        td2.Start();
    }

你说要不要搞个数据显示的程序呢 ?那是必须的

    private void msgDisplay(string v)
    {
        textBox1.Invoke(new Action<string>((str)=> {
            textBox1.AppendText(str+"\r\n");
        }),v);
    }

现在应该没有什么话说了把,完美解决!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值