资源描述:
《基于UDP、TCP协议的C#网络编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于UDP.TCP协议的C#网络编程之一(2007-06-1318:00:14)转载▼分类:JET写这篇之前,先简单介绍一下TCP、LDP协议,深的讲不岀来,有不明白的请问我秘书Dawnh同学。TCP(传输控制协议)是TCP/IP协议栈中的传输层协议,它通过序列确认以及包重发机制,提供可靠的数据流发送和到应用程序的虚拟连接服务。与IP协议相结合,TCP组成了因特网协议的核心。UDP(用户数据报协议)是ISO参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP协议基本上是IP协议与上层协议
2、的接口。UDP协议适用端口分辨运行在同一台设备上的多个应用程序。C#中,已将TCP,UDP,SMTP等协议封装为相应的类型库,提供了一系列方法供程序员进行操作,可以简单的理解为,基于TCP的编程就好彖通电话,我拨打贱人甲电话,贱人甲必须按下接听键,我们之间才能建立起有效的连接,而基于UDP的编程就好象是收音机广播,我这头只管播,对面谁在听或者是不是收到我并不关心°TCP、UDP同属于高层协议,复杂程度是大大不如Socket编程的。下面我准备写两个例子,一个用UDP,一个用TCP,TCP比较好理解,UDP实际上也不
3、麻烦,但是从网上找资料看你会看的非常晕,MSDN的各种Sample也统统放到一个类里写,效果并不好,我稍微一总结,先写个基于UDP的例子。示例一:UDP窗体:BfiFormlSendForml做为服务器端,按下Send,将文本框的值发送出去,Forml做为客户端,接收信息并加入到ListBox控件中。Forml:publicpartialclassForml:Form{IdpClientuc;〃声明UDPCiientpublicPorml0{uc=newUdpClientO;//初始化InitializcComp
4、onent();)privatevoidbuttonl_Click(objectsender,EventArgse){stringtemp=this.textBoxl.Text;//保存TextBox文木//将该文木转化为字节数组byte[]b=System.Text.Encoding.UTF8.GctBytcs(temp);//向本机的8888端口发送数据uc.Send(b,b.Length,Dns.GetHostName(),8888);)}Form2:pub1icpartialclassForm2:Form
5、{UdpClientuc=null;〃声明UDPCiientpublicl?orml(){//屏蔽跨线程改控件属性那个异常CheckForl1legalCrossThreadCalIs=false:InitializeComponcnt();〃注意此处端口号要与发送方相同uc=newUdpClient(8888);//开一线程Threadth=newThread(newThreadStart(listen));〃设置为后台th.IsBackground=true;th.Start0;)privatevoid1is
6、tenO{〃声明终结点IPEndPointiep=newIPEndPoint(IPAddress.Parse("192.168.0.10"),8888);whi1e(true){〃获得Forml发送过来的数据包stringtext=System.Text.Encoding・UTF8・GotString(uc・Receive(reficp));//加入ListBoxthis.1istBoxl.Items.Add(text):)}}需要注意的地方非常之多,别看就这么儿行,先看Forml中的UdpClient声明,这里
7、使用了无参的构造函数uc二newUdpClientO;我们写基于TCP的程序可以知道,TcpClient声明同时直接指岀其端口是很方便的,也是必然的,不指定端口你上哪收数据去?因为UDP是一种无连接的传输层协议,想给谁发就给谁发,所以如果我们这么声明了UdpClient,但是接收方如果想收到数据包,就必须建立基于发送方发送数据端口的UdpClient(见Form2),这么说有点乱,接着往下看。当我们声明了uc二newUdpClient();那下面的写法就相对固定[,在Send数据的吋候,需要指明其目标计算机,以及
8、将要发送的端口,例如示例屮的uc.Send(b,b.Length,Dns.GctllostNeinic(),8888);Send有很多重载的方法,如果你想这么写uc.Send(b,b・Length);那就必须在Send之前在UdpClient岁目标计算机之间做一下连接,否则无法发送,我们可以这么写:uc二newUdpClient();uc.Connect(IPAddres