C#简单的UDP通信例子加代码
1,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.Net;namespace WindowsFormsApplication14{ public partial class Form1 Form UdpClient udpClient; IPEndPoint ipEndPoint; public Form1() { InitializeComponent(); udpClient = new UdpClient(12345); ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.241"), 60000); } private void button1_Click(object sender, EventArgs e) { //byte[] mybyte = Encoding.Default.GetBytes("nihao"); byte[] mybyte = new byte[4]; mybyte[0] = 0x12; mybyte[1] = 0x00; mybyte[2] = 0x34; mybyte[3] = 0x00; udpClient.Send(mybyte, mybyte.Length,ipEndPoint); } }}
2,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.Net;namespace WindowsFormsApplication15{ public partial class Form1 Form UdpClient udpServer; IPEndPoint ipEndPoint; public Form1() { InitializeComponent(); udpServer = new UdpClient(23456); ipEndPoint = new IPEndPoint(new IPAddress(0), 0); } private void button1_Click(object sender, EventArgs e) { byte[] data = udpServer.Receive(ref ipEndPoint); MessageBox.Show ( Encoding.Default.GetString(data)); } }}
3,读接收缓冲区当前数据个数
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.Net;namespace WindowsFormsApplication15{ public partial class Form1 Form UdpClient udpServer; IPEndPoint ipEndPoint; public Form1() { InitializeComponent(); udpServer = new UdpClient(23456); ipEndPoint = new IPEndPoint(new IPAddress(0), 0); } private void button1_Click(object sender, EventArgs e) { byte[] outValue = BitConverter.GetBytes(0); udpServer.Client.IOControl(IOControlCode.DataToRead, null, outValue); MessageBox.Show((BitConverter.ToInt32(outValue,0)).ToString());//发送数据发现此时数据增长,但不会超过8K //MessageBox.Show((BitConverter.ToString(outValue)).ToString()); } }}
4,上例有点复杂,看下面的例子,这个例子还可以说明如何设置非阻塞Socket通讯
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.Net;namespace WindowsFormsApplication15{ public partial class Form1 Form UdpClient udpServer; IPEndPoint ipEndPoint; public Form1() { InitializeComponent(); udpServer = new UdpClient(23456); ipEndPoint = new IPEndPoint(new IPAddress(0), 0); udpServer.Client.Blocking = false//设置为非阻塞模式 private void button1_Click(object sender, EventArgs e) { int buffSizeCurrent; buffSizeCurrent = udpServer.Client.Available;//取得缓冲区当前的数据的个数
MessageBox.Show(buffSizeCurrent.ToString()); if (buffSizeCurrent > 0) //有数据时候才读,不然会出异常哦 { byte[] data = udpServer.Receive(ref ipEndPoint); MessageBox.Show(Encoding.Default.GetString(data)); } } }}
5,上面的例子是同步非阻塞的例子,但默认是同步阻塞的。除此之外还有异步的通讯方式(事件通知的方式触发),稍微复杂。
浙公网安备 33010602011771号