Welcome

首页 / 软件开发 / C# / UDP数据传输实例

UDP数据传输实例2011-04-06下面通过一个例子,对UdpClient类的用法及它的一些方法进行说明。在UDP模式下,不存在明显的服务器与客户端之分,所以在这里用A端和B端代替。本例要实现的功能是从A端到B端的点对点通信。打开VS2008,在D:C#ch17目录下建立名为P2PTest的Windows应用程序。打开工程,为当前窗体添加如表17-9所示控件。

表17-9 添加控件列表

控件名NameText
LabelLabel1对方IP:
TextBoxtbIP 
TextBoxtbMsg 
ButtonbtnSend发送
ListBoxlbInfo 
GroupBoxgbSend发送窗口
GroupBoxgbReceive接收窗口
ButtonbtnClear清空

本例是利用8888端口进行局域网内部的点对点通信,只要确认对方IP,就能相互发送信息。代码的添加主要分为以下步骤。

(1)首先是对几个命名空间的引用,包括System.Net、System.Net.Sockets和System.Threading。然后定义如下三个全局变量。

private UdpClient uc;

private IPEndPoint iep;

private Thread th;

其中UdpClient是本例的核心成员,主要通过它的相关方法进行数据的收发。

(2)本例使用8888端口进行通信,所以应该在当前窗体构造函数Form1()内,用该端口实例化UdpClient。

public Form1()

{

InitializeComponent();

CheckForIllegalCrossThreadCalls = false;

uc = new UdpClient(8888);

}

CheckForIllegalCrossThreadCalls主要是解决线程间的控件操作问题,通过将其属性设置为fasle,可以禁用对操作控件的线程是否为创建该窗体的线程的检测,阻止该异常的发生。这种问题在第16章中也遇到过,当时是采用的委托的方法进行解决。

(3)双击“发送”按钮,添加如下代码。

iep = new IPEndPoint(IPAddress.Parse(tbIP.Text), 8888);

th = new Thread(new ThreadStart(listen));

th.IsBackground = true; //设置在后台运行

th.Start(); //启动线程

string temp = tbMsg.Text;

byte[] b = Encoding.UTF8.GetBytes(temp); //对发送的数据的进行UTF8格式的编码

uc.Send(b, b.Length,iep); //发送数据