UDP原理就不多說了,網上能搜出一大堆。程式分為用戶端和伺服器端。實現的功能:伺服器端接收用戶端發來的資料並顯示。
1.用戶端
介面如下
各控制項名稱:textBoxIP,textBoxPort,textBoxTxt,buttonSend。
用戶端程式通過伺服器的IP地址和連接埠號碼向伺服器發送資料,IP地址預設為localhost,也可以是127.0.0.1 。
用戶端程式代碼:
using System;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
namespace UDPClient
{
public partial class Form1 : Form
{
UdpClient uc;
public Form1()
{
InitializeComponent();
uc = new UdpClient();
this.textBoxIP.Text = "localhost";
}
private void buttonSend_Click(object sender, EventArgs e)
{
string host = this.textBoxIP.Text;
int port = Convert.ToInt32(this.textBoxPort.Text);
string txt = this.textBoxTxt.Text;
byte[] b = System.Text.Encoding.UTF8.GetBytes(txt);
if (host == "localhost")
{
host = Dns.GetHostName();
}
if (uc!=null)
{
uc.Send(b, b.Length, host, port);
}
}
}
}
2.伺服器端介面
各控制項名稱:textBoxPort,listBox1,buttonStart
伺服器端設定接收資料的連接埠,點擊start開始。連接埠改變要重新start。
代碼如下:
using System;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace UDPServer
{
public partial class Form1 : Form
{
UdpClient uc = null;
Thread th = null;
public Form1()
{
InitializeComponent();
//屏蔽跨線程改控制項屬性那個異常
CheckForIllegalCrossThreadCalls = false;
}
private void listen()
{
//聲明終結點,IP,連接埠號碼隨便指定
IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.0.147"), 8888);
while (true)
{
//獲得Form1發送過來的資料包
string text = System.Text.Encoding.UTF8.GetString(uc.Receive(ref iep));
//加入ListBox
this.listBox1.Items.Add(text);
}
}
private void button1_Click(object sender, EventArgs e)
{
//注意此處連接埠號碼要與發送方相同
int port = Convert.ToInt32(this.textBoxPort.Text);
uc = new UdpClient(port);
//執行個體化線程
th = new Thread(new ThreadStart(listen));
//設定為後台
th.IsBackground = true;
th.Start();
}
private void textBoxPort_TextChanged(object sender, EventArgs e)
{
//連接埠改變則需要重新啟動線程
if (th!=null)
{
th.Abort();
}
}
}
}