您的位置:首页 > 编程语言 > C#

C#简单的UDP通信例子

2009-09-25 09:53 573 查看
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,上面的例子是同步非阻塞的例子,但默认是同步阻塞的。除此之外还有异步的通讯方式(事件通知的方式触发),稍微复杂,以后补充。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: