winform下UPD通信的简单应用

来源:互联网 发布:女高中生知乎 编辑:程序博客网 时间:2024/06/01 10:28

先看效果图:

使用UDP的好处就是不需要三次握手,但是缺点就是存在安全隐患。

QQ就是利用UDP来传输数据的。

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net.Sockets;using System.Threading;using System.Net;using System.Net.Sockets;namespace UDP{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        //启动服务端        UdpClient udpServer;        delegate void SetTextCallBack(string text);        private void button1_Click(object sender, EventArgs e)        {            udpServer = new UdpClient(3000);            label2.Text = "服务器已启动..";            button1.Enabled = false;            Thread t = new Thread(new ThreadStart(ReceiveMsg));            t.IsBackground = true;            t.Start();                    }                public void ReceiveMsg()        {            IPEndPoint ipe = new IPEndPoint(IPAddress.Any, 3000);            while (true)            {                            byte[] buffer = udpServer.Receive(ref ipe);                string msg = Encoding.Unicode.GetString(buffer);                    SetText(msg);            }                    }        public void SetText(string text)        {            if (text == "")            {                if (richTextBox1.InvokeRequired)                {                    SetTextCallBack st = new SetTextCallBack(SetText);                    this.Invoke(st, new object[] { text });                }                else                {                    richTextBox1.Text +="小万  " +DateTime.Now.ToString() + "\n" + " " + "\n";                }            }            else            {                                    if (richTextBox1.InvokeRequired)                    {                        SetTextCallBack st = new SetTextCallBack(SetText);                        this.Invoke(st, new object[] { text });                    }                    else                    {                        richTextBox1.Text +="小万  " +DateTime.Now.ToString() + "\n" + text  + "\n";                    }                            }        }        //客户端        private void button2_Click(object sender, EventArgs e)        {            if (button1.Enabled ==true)            {                MessageBox.Show("服务端未开启!");            }            else            {                UdpClient client = new UdpClient();                string ip = textBox1.Text;                string msg = richTextBox2.Text;                byte[] buffer = Encoding.Unicode.GetBytes(msg);                IPEndPoint ips = new IPEndPoint(IPAddress.Parse(ip), 3000);                client.Send(buffer, buffer.Length, ips);                client.Close();                MessageBox.Show("发送成功!");            }        }         }}

自己理解下。