网络编程技术教程课件.ppt

上传人(卖家):晟晟文业 文档编号:4096813 上传时间:2022-11-10 格式:PPT 页数:49 大小:320.51KB
下载 相关 举报
网络编程技术教程课件.ppt_第1页
第1页 / 共49页
网络编程技术教程课件.ppt_第2页
第2页 / 共49页
网络编程技术教程课件.ppt_第3页
第3页 / 共49页
网络编程技术教程课件.ppt_第4页
第4页 / 共49页
网络编程技术教程课件.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

1、1 1C#C#网络编程技术教程网络编程技术教程第六章 TCP/UDP编程 第第6 6章章 TCP/UDPTCP/UDP编程编程 2 2学习目标学习目标了解了解TCPTCP和和UDPUDP。掌握掌握C#C#中面向中面向TCPTCP和和UDPUDP编程的主要类:编程的主要类:TcpClientTcpClient、TcpListenerTcpListener和和UdpClientUdpClient。掌握掌握TcpClientTcpClient、TcpListenerTcpListener和和UdpClientUdpClient的的编程方法。编程方法。了解多播的原理,掌握基于了解多播的原理,掌握基于U

2、dpClientUdpClient的多播编的多播编程方法。程方法。第第6 6章章 TCP/UDPTCP/UDP编程编程 3 3本章内容本章内容6.1 TCP/UDP6.1 TCP/UDP概述概述 6.2 .NET6.2 .NET中的中的TCPTCP编程基础编程基础 6.3 6.3 基于基于TCPTCP的编程实例的编程实例 6.4 .NET6.4 .NET中的中的UDPUDP编程基础编程基础 6.5 6.5 多播编程多播编程 第第6 6章章 TCP/UDPTCP/UDP编程编程 4 46.1 TCP/UDP6.1 TCP/UDP概述概述 在TCP/IP协议族中,传输层主要包括TCP和UDP两种通

3、信协议,它们以不同的方式实现两台主机中的不同应用程序之间的数据传输,即数据的端到端传输。由于它们的实现方式不同,因此各有一套属于自己的端口号,且相互独立。可以采用如下五元组来描述两个应用进程之间的通信关联。(协议,信源机IP地址,信源应用进程端口,信宿机IP地址,信宿应用进程端口)即端到端之间的一条通信连接就可以表示为上述五元组,这也是进行网络程序设计最基本的概念。其中,传输控制协议(Transmission Control Protocol,TCP)提供一种面向连接的、可靠的数据传输服务,保证了端到端数据传输的可靠性。也正因为这样,使TCP协议成为传输层最常用的协议,同时也是一个比较复杂的协

4、议,其提供了传输层几乎所有的功能。因此和IP协议一样,成为了 TCP/IP协议族中最重要的协议之一。其主要特点如下:(1)向应用进程提供面向连接的服务,两个需要通过TCP协议进行数据传输的应用进程之间首先必须建立一个TCP连接,并且在数据传输完成后要释放连接。一般将请求连接的应用进程称为客户进程,而响应连接请求的应用进程称为服务器进程,即TCP连接的建立采用的是一种客户机/服务器工作模型。(2)提供全双工数据传输服务,只要建立了TCP连接,就能在两个应用进程间进行双向的数据传输服务,但是这种传输只是端到端的传输,不支持广播和多播。第第6 6章章 TCP/UDPTCP/UDP编程编程 5 56.

5、1 TCP/UDP6.1 TCP/UDP概述概述 (3)提供面向字节流的服务,即TCP协议的数据传输是面向字节流的,两个建立了TCP连接的应用进程之间交换的是字节流。发送进程以字节流形式发送数据,接收进程也把数据作为字节流来接收。端到端之间不保留数据记录的边界,也就是说,在传输的层面上不存在数据记录的概念。用户数据报协议(User Datagram Protocol,UDP)是传输层的两个主要协议之一,相对TCP协议来说,UDP是一种非常简单的协议,在网络层的基础上实现了应用进程之间端到端的通信。与TCP协议不同,UDP协议是一种无连接的协议,数据在传输之前通信双方不需要建立连接。信宿在收到U

6、DP数据报之后也不需要给出任何应答报文。发送方发出的每一个UDP用户数据报都是独立的,都携带了完整的目的地址。每个数据报都可以被网络系统独立路由。因此从同一个信源发往同一个信宿的多个UDP报文可能选择不同的路径达到信宿,它们达到的先后顺序也可能不同于发送顺序。所以,UDP协议提供的是一种无连接的、不可靠的数据传输方式,在数据传输过程中没有流量控制和确认机制,数据报可能会丢失、延迟、乱序到达信宿。UDP协议只是提供了利用校验和检查数据完整性的简单差错控制,属于一种尽力而为的数据传输方式。虽然UDP用户数据报只提供不可靠的传输方式,但它具有其自身的一些特点:(1)UDP是一个无连接协议,传输数据之

7、前信源和信宿不需要建立连接,因此不存在连接建立的时延。在信源端,UDP传送数据的速度仅仅受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在信宿端,UDP把每个数据报放在队列中,应用程序每次从队列中读一个数据报。第第6 6章章 TCP/UDPTCP/UDP编程编程 6 66.1 TCP/UDP6.1 TCP/UDP概述概述 (2)由于传输数据不需要建立连接,也就不需要维护连接状态,包括收发状态等,这样一台服务机可同时向多个客户机传输相同的数据,例如实现多播。(3)UDP数据报的首部很短,只有8字节,相对于TCP的20字节首部的开销要小很多。(4)吞吐量不受流量控制算法的调节,只受应用软件

8、生成数据的速率、传输带宽、信源和信宿主机性能的限制。由于UDP具有这些特点,有许多应用更适合使用UDP协议,如:(1)只需要简单数据交换的应用,例如DNS服务,它不需要复杂的可靠性保证机制,这样,利用UDP来传输数据既可以节省系统开销又提高了网络的传输效率。(2)不需要关心数据的差错控制和流量控制的应用。(3)实时性要求较高但可承受一定的数据错误的应用,例如实时语音传输、实时视频通信等。(4)实现一对多数据发送的应用,例如广播和组播。第第6 6章章 TCP/UDPTCP/UDP编程编程 7 76.2.NET6.2.NET中的中的TCPTCP编程基础编程基础 6.2.1 TcpClient类 T

9、cpClient类为TCP网络服务提供客户端连接,它构建于Socket类之上,以提供较高级别的TCP服务,即提供了通过网络连接、发送和接收数据的简单方法。用于在同步阻止模式下通过网络来连接、发送和接收流数据。另外,通过与NetworkStream对象的关联,使得用户可以通过流操作方式实现对网络连接状态下数据的发送和接收。TcpClient类的常见属性和方法分别见下表。属 性描 述Available 获取网络接收缓冲区中可供读取的数据量Client 获取或设置基础SocketConnected 标识TcpClient的基础Socket是否已连接到远程主机NoDelay 指定在发送或接收缓冲区未满

10、时,套接字是否将延迟发送或接收数据ReceiveBufferSize 获取或设置接收缓冲区的大小ReceiveTimeout 获取或设置在初始化一个读取操作以后 TcpClient 等待接收数据的时间量SendBufferSize 获取或设置发送缓冲区的大小SendTimeout 获取或设置 TcpClient 等待发送操作成功完成的时间量第第6 6章章 TCP/UDPTCP/UDP编程编程 8 86.2.NET6.2.NET中的中的TCPTCP编程基础编程基础 6.2.1 TcpClient类TcpClient构 造 函 数BeginConnect 开始一个对远程主机连接的异步请求Close

11、 释放TcpClient 实例,而不关闭基础连接Connect 依据指定的主机名和端口号连接到TCP主机EndConnect 异步接受传入的连接尝试 GetStream 返回用于发送和接收数据的NetworkStream实例 第第6 6章章 TCP/UDPTCP/UDP编程编程 9 96.2.NET6.2.NET中的中的TCPTCP编程基础编程基础 6.2.1 TcpClient类 通过TcpClient类实现与TCP主机的通信流程如图所示。1创建TcpClient实例TcpClient类有4种构造函数的重载形式,分别对应4种创建实例的方法。(1)TcpClient(),这种不带任何参数的构造

12、函数将使用本机默认的IP地址并将使用默认的通信端口号0。当然,如果本机不止一个IP地址时将无法选择使用。(2)TcpClient(AddressFamily),使用指定的地址族初始化TcpClient类的新实例。(3)TcpClient(IPEndPoint),即使用本机IPEndPoint创建TcpClient的实例。其中IPEndPoint将网络端点表示为IP地址和端口号,用于指定在建立远程主机连接时所使用的本地网络接口IP地址和端口号。(4)TcpClient(String,Int32),初始化 TcpClient 类的新实例并连接到指定主机上的指定端口。因此,在TcpClient的构造

13、函数中,如果没有指定远程主机名和端口号,它只是用来实例化TcpClient,同时实现与本地IP地址和Port端口的绑定。第第6 6章章 TCP/UDPTCP/UDP编程编程 10106.2.NET6.2.NET中的中的TCPTCP编程基础编程基础 6.2.1 TcpClient类2与远程主机建立连接 如果在TcpClient的实例化过程中没有实现与远程主机的连接,则可以通过Connect方法来实现与指定远程主机的连接。Connect方法使用指定的主机名和端口号将客户端连接到远程主机,其使用方法如下。(1)Connect(IPEndPoint),使用指定的远程网络终结点将客户端连接到远程TCP主

14、机。(2)Connect(IPAddress),使用指定的IP地址和端口号将客户端连接到远程TCP主机。(3)Connect(IPAddress,Int32),使用指定的IP地址和端口号将客户端连接到远程TCP主机。(4)Connect(String,Int32),使用指定的主机名和端口号将客户端连接到指定主机上的指定端口。如下代码段描述了TcpClient实例的创建以及与指定远程主机的连接过程。m_client=new TcpClient();m_client.Connect(m_servername,m_port);第第6 6章章 TCP/UDPTCP/UDP编程编程 11116.2.NE

15、T6.2.NET中的中的TCPTCP编程基础编程基础 6.2.1 TcpClient类3利用NetworkStream实例发送和接收数据 TcpClient类创建在Socket之上,提供了更高层次的TCP服务抽象,特别是在网络数据的发送和接收方面,TcpClient使用标准的Stream流处理技术,通过使用NetworkStream实例的读写操作来实现网络数据的接收和发送,因此更加方便直观。但NetworkStream与普通流Stream有所不同,NetworkStream没有当前位置的概念,不支持查找和对数据流的随机访问。该方法首先通过TcpClient.GetStream来返回Networ

16、kStream实例,进而利用所获取的NetworkStream实例的读写方法Write和Read来发送和接收数据,其实现代码如下所示。rs=new StreamReader(m_client.GetStream();/获取接收数据的网络流实例ws=m_client.GetStream();/获取发送数据的网络流实例m_returnData=rs.ReadLine();/接收网络数据Console.WriteLine(m_returnData);ws.Write(data,0,data.Length);/向网络发送数据4关闭TCP套接字 在与服务器完成通信后,应该调用Close()方法释放所有的

17、资源。m_client.Close();第第6 6章章 TCP/UDPTCP/UDP编程编程 12126.2.NET6.2.NET中的中的TCPTCP编程基础编程基础 6.2.2 TcpListener类 TcpClient类实现了客户端编程抽象,因此构建客户端网络应用程序便可以直接使用TcpClient取代Socket,更加方便易用。同样,对于服务器端应用程序的构建,C#提供了TcpListener类。该类也是构建于Socket之上,提供了更高抽象级别的TCP服务,使得程序员能更方便地编写服务器端应用程序。TcpListener类的常见属性和方法分别如表6.3、表6.4所示。名 称描 述Ex

18、clusiveAddressUse 获取或设置一个布尔值,以指定当前TcpListener是否只允许一个基础套接字来侦听特定端口LocalEndpoint 获取当前TcpListener的基础IPEndPoint实例,此对象包含关于本地网络接口的IP地址和端口号信息Active指明TcpListener是否正在侦听连接请求(受保护方法)Server 获取基础网络Socket实例第第6 6章章 TCP/UDPTCP/UDP编程编程 13136.2.NET6.2.NET中的中的TCPTCP编程基础编程基础 6.2.2 TcpListener类 名 称描 述AcceptSocket接受挂起的连接请求

19、,并返回一个Socket实例用来与客户进行通信 AcceptTcpClient 接受挂起的连接请求,并返回一个TcpClient实例用来与客户进行通信BeginAcceptSocket 开始一个异步操作来接受一个传入的连接尝试BeginAcceptTcpClient 开始一个异步操作来接受一个传入的连接尝试 EndAcceptSocket 异步接受传入的连接尝试,并创建新的Socket来处理远程主机通信EndAcceptTcpClient 异步接受传入的连接尝试,并创建新的TcpClient来处理远程主机通信 Pending 确定是否有挂起的连接请求Start 开始侦听客户端的连接请求 Sto

20、p 关闭侦听器第第6 6章章 TCP/UDPTCP/UDP编程编程 14146.2.NET6.2.NET中的中的TCPTCP编程基础编程基础 6.2.2 TcpListener类 通常情况下,服务器端应用程序在启动时将首先绑定本地网络接口的IP地址和端口号,然后进入侦听客户请求的状态,以便于客户端应用程序提出显式请求。一旦侦听到有客户端应用程序请求连接侦听端口,服务器端应用将接受请求,并建立一个负责与客户端应用程序通信的信道,即通过创建连接套接字与客户端应用程序建立连接,由连接套接字完成与客户端应用程序的数据传送操作,服务器端应用程序继续侦听更多的客户端连接请求。TcpListener通过实例

21、创建过程完成与本地网络接口的绑定,并由所创建的实例调用Start方法启动侦听;当侦听到客户端应用程序的连接请求后,根据客户端应用程序的不同请求方式,可以通过AcceptTcpClient方法接受传入的连接请求并创建TcpClient实例以处理请求,或者通过AcceptSocket方法接受传入的连接请求并创建Socket实例以处理请求,并由所创建的TcpClient实例或Socket实例完成与客户端应用程序的网络数据传输。最后,需要使用Stop关闭用于侦听传入连接的Socket,同时也必须关闭从AcceptSocket或AcceptTcpClient返回的任何实例,以释放相关资源。其实现流程如右

22、图所示。第第6 6章章 TCP/UDPTCP/UDP编程编程 15156.2.NET6.2.NET中的中的TCPTCP编程基础编程基础 6.2.2 TcpListener类1创建TcpListener实例 TcpListener类提供了3种构造函数的重载形式来创建TcpListener实例。(1)TcpListener(port);/指定本机端口(2)public TcpListener(IPEndPoint)/指定本机终结点(3)public TcpListener(IPAddress,port)/指定本机IP地址及端口 分别根据指定的侦听端口、IPEndPoint对象(包含了IP地址和端口

23、号)、IPAddress对象和端口号来创建TcpListener实例,并且实现与默认端口或指定IP地址和端口的绑定,如:m_host=IPAddress.Parse(m_serverIP);m_Listener=new TcpListener(m_host,m_port);2侦听 创建TcpListener实例后,便可以调用Start方法启动侦听,即该方法将调用TcpListener实例的基础Socket上的Listen方法,开始侦听客户的连接请求,如:m_Listener.Start();3接收连接请求 当侦听到有客户连接请求时,可以使用AcceptSocket或AcceptTcpClien

24、t接收任何当前在队列中挂起的连接请求。这两种方法分别返回一个Socket或TcpClient实例以接受客户的连接请求,如:TcpClient m_client=m_Listener.AcceptTcpClient();通过返回的Socket或TcpClient实例来实现与提出连接请求的客户的单独网络数据传输。第第6 6章章 TCP/UDPTCP/UDP编程编程 16166.2.NET6.2.NET中的中的TCPTCP编程基础编程基础 6.2.2 TcpListener类4收发数据 如果接收连接请求时返回的是Socket实例,则可以用Send和Receive方法实现与客户的通信。如果返回的是Tc

25、pClient实例,则可以通过对NetworkStream的读写来实现与客户的数据通信。由于服务器可以同时与多个客户建立连接并进行数据通信,因此往往会引入多线程技术,为每个客户的连接建立一个线程,在该线程中实现与客户的数据通信。如下代码所示。/为每个客户连接创建并启动一个线程TcpClient m_client=m_Listener.AcceptTcpClient();ClientHandle m_handle=new ClientHandle();m_handle.ClientSocket=m_client;Thread m_clientthread=new Thread(new Threa

26、dStart(m_handle.ResponseClient);m_clientthread.Start();第第6 6章章 TCP/UDPTCP/UDP编程编程 17176.2.NET6.2.NET中的中的TCPTCP编程基础编程基础 6.2.2 TcpListener类/线程处理代码public void ResponseClient()if(m_clientsocket!=null)StreamReader rs=new StreamReader(m_clientsocket.GetStream();NetworkStream ws=m_clientsocket.GetStream();

27、while(true)/接收信息 m_returnData=rs.ReadLine();/回送信息 ws.Write(data,0,data.Length);m_clientsocket.Close();5关闭连接 与客户程序通信完成之后,最后一步是停止侦听套接字,此时可以调用TcpListener的Stop方法来实现。第第6 6章章 TCP/UDPTCP/UDP编程编程 18186.3 6.3 基于基于TCPTCP的编程实例的编程实例 为了综合应用TcpListener和TcpClient实现网络应用程序的设计,本节设计了一个简单的询问时间和回应程序,即客户端程序可以利用GETDATE命令询

28、问服务器的当前时间,而对于除命令以外的数据,服务器则原样返回给客户端程序。客户端程序和服务器程序的交互流程如图6.3所示。在实现中,为了能使服务器更好地响应多个客户的请求,服务器程序的设计采用了多线程技术,针对每个客户创建并启动一个线程与之通信。整个系统的类图如图6.4所示。图6.3 客户端程序和服务器程序交互流程图 图6.4 系统类图第第6 6章章 TCP/UDPTCP/UDP编程编程 19196.3 6.3 基于基于TCPTCP的编程实例的编程实例 6.3.1 服务器端编程 服务器程序的实现主要是基于TcpListener、TcpClient和多线程技术,利用TcpListener实例进行

29、客户连接的侦听和接受客户连接请求,而通过多线程技术为每个客户连接创建一个处理线程,完成与客户程序的通信。服务器程序运行所需的本机网络接口IP和侦听端口号都利用命令行参数获取。程序如下:using System;using System.Net;using System.IO;using System.Net.Sockets;using System.Threading;using System.Collections;using System.Text;namespace Server /客户连接处理,用来接收和发送网络数据 class ClientHandle private string

30、m_usename;private TcpClient m_clientsocket=null;/TcpClient实例 private string m_returnData,m_sendData;/接收和发送数据 byte data;/中间变量 public TcpClient ClientSocket /属性 get return m_clientsocket;set m_clientsocket=value;byte EncodingASCII(string buf)/将数据转换为ASCII byte data=Encoding.ASCII.GetBytes(buf+rn);retur

31、n data;第第6 6章章 TCP/UDPTCP/UDP编程编程 20206.3 6.3 基于基于TCPTCP的编程实例的编程实例 6.3.1 服务器端编程 public void ResponseClient()if(m_clientsocket!=null)StreamReader rs=new StreamReader(m_clientsocket.GetStream();NetworkStream ws=m_clientsocket.GetStream();/获取用户名 m_returnData=rs.ReadLine();m_usename=m_returnData;/保留用户名

32、m_sendData=Welcome +m_returnData+to Server;Console.WriteLine(m_sendData);/显示信息 /回送欢迎信息 data=EncodingASCII(m_sendData);ws.Write(data,0,data.Length);while(true)/接收信息 m_returnData=rs.ReadLine();/解释所接收的信息 if(m_returnData.IndexOf(QUIT)-1)Console.WriteLine(m_usename+has quited!);/显示退出信息 break;else if(m_re

33、turnData.IndexOf(GETDATA)-1)m_sendData=DateTime.Now.ToString();/回送当前时间 else m_sendData=-+m_returnData;/回送所接收的信息 /回送信息 data=EncodingASCII(m_sendData);ws.Write(data,0,data.Length);m_clientsocket.Close();第第6 6章章 TCP/UDPTCP/UDP编程编程 21216.3 6.3 基于基于TCPTCP的编程实例的编程实例 6.3.1 服务器端编程class Server static void Ma

34、in(string args)string m_serverIP=172.0.0.1;int m_port=5555;bool rt=false;TcpListener m_Listener=null;IPAddress m_host;if(args.Length 2)Console.WriteLine(Usage:Server ServerIP Port);else try m_serverIP=args0.ToString();m_port=int.Parse(args1.ToString();rt=true;catch(Exception e)Console.WriteLine(Para

35、metre Error:+e.Message);第第6 6章章 TCP/UDPTCP/UDP编程编程 22226.3 6.3 基于基于TCPTCP的编程实例的编程实例 6.3.1 服务器端编程 if(rt)try m_host=IPAddress.Parse(m_serverIP);m_Listener=new TcpListener(m_host,m_port);m_Listener.Start();Console.WriteLine(Starting to listen.);while(true)TcpClient m_client=m_Listener.AcceptTcpClient()

36、;ClientHandle m_handle=new ClientHandle();m_handle.ClientSocket=m_client;Thread m_clientthread=new Thread(new ThreadStart(m_handle.Response Client);m_clientthread.Start();m_Listener.Stop();catch(Exception e)Console.WriteLine(Exception:+e.Message);第第6 6章章 TCP/UDPTCP/UDP编程编程 23236.3 6.3 基于基于TCPTCP的编程实

37、例的编程实例 6.3.2 客户端编程 客户程序负责向服务器发送询问时间命令GETDATE、退出命令QUIT和其他数据信息。它运行所需的参数,包括用户名、服务器地址和服务器侦听端口号都是通过命令行参数获取。实现过程如代码实例6.2所示。using System;using System.Net;using System.IO;using System.Net.Sockets;using System.Text;namespace Client /客户类 class Client static byte EncodingASCII(string buf)/将数据转换为ASCII byte data

38、=Encoding.ASCII.GetBytes(buf+rn);return data;static void Main(string args)string m_servername=127.0.0.1,m_usename=NoName;int m_port=5555;TcpClient m_client;bool rt=false;string m_sendData,m_returnData;byte data;StreamReader rs;NetworkStream ws;第第6 6章章 TCP/UDPTCP/UDP编程编程 24246.3 6.3 基于基于TCPTCP的编程实例的编

39、程实例 6.3.2 客户端编程 if(args.Length -1)/退出 m_sendData=QUIT;else if(m_sendData.IndexOf(GETDATE)-1)/询问时间命令 m_sendData=GETDATE;data=EncodingASCII(m_sendData);ws.Write(data,0,data.Length);/发送数据 if(m_sendData.IndexOf(QUIT)-1)break;m_client.Close();catch(Exception e)Console.WriteLine(Exception:+e.Message);第第6

40、6章章 TCP/UDPTCP/UDP编程编程 26266.4 .NET6.4 .NET中的中的UDPUDP编程基础编程基础 在.NET中,基于UDP协议的网络程序设计可以通过以下4种方法来实现。Winsock API Winsock非托管API Socket类 UdpClient类 前面两种都是直接利用操作系统或第三方提供的网络编程API实现,这要求编程人员必须对网络编程的底层知识有较好的了解。而Socket类实质上是Winsock API的一个包装器,使用Socket类进行网络程序设计与直接使用Winsock API类似。UdpClient类是基于Socket类的较高级别抽象,提供了较高级别

41、的UDP服务。较前面三种方法具有直观易用等优势。因此,在.NET环境中基于UDP协议的网络程序设计可以直接用UdpClient类。6.4.1 UdpClient类 与TcpClient和TcpListener类似,UdpClient也是构建于Socket类之上,提供了更高层次的UDP服务抽象,用于在阻止同步模式下发送和接收无连接 UDP 数据报,使用简单直观。UdpClient类的常见方法和属性分别如表6.5、表6.6所示。第第6 6章章 TCP/UDPTCP/UDP编程编程 27276.4 .NET6.4 .NET中的中的UDPUDP编程基础编程基础 BeginReceive 从远程主机异步

42、接收数据报 BeginSend 将数据报异步发送到远程主机 Close 关闭UDP连接 Connect 指定发送数据的默认远程主机DropMulticastGroup 退出多播组 EndReceive 结束挂起的异步接收 EndSend 结束挂起的异步发送 JoinMulticastGroup 将当前的UdpClient实例添加到多播组 Receive 接收已由远程主机发送的UDP数据报,同时返回远程主机信息 Send 将UDP数据报发送到远程主机 6.4.1 UdpClient类 Available 获取从网络接收的可读取的数据量Client 获取或设置基础网络SocketDontFragm

43、ent 获取或设置指定UdpClient实例是否允许对IP协议数据报进行分段的标志EnableBroadcast 获取或设置指定UdpClient实例是否可以发送或接收广播数据包的标志ExclusiveAddressUse 获取或设置指定UdpClient是否只允许一个客户端使用端口的标志MulticastLoopback 获取或设置是否将输出多播数据包传递给发送应用程序的标志Ttl 获取或设置指定由UdpClient发送的IP协议数据包的生存时间TTL的值第第6 6章章 TCP/UDPTCP/UDP编程编程 28286.4 .NET6.4 .NET中的中的UDPUDP编程基础编程基础 6.4

44、.1 UdpClient类 基于UdpClient的网络应用编程首先需要创建一个UdpClient类实例,接着通过调用其Connect方法连接到远程主机。当然,这两步也可以直接由指定远程主机名和端口号的UdpClient类构造函数完成。然后便可以利用Send和Receive方法来发送和接收数据。最后调用Close方法关闭UDP连接,并释放相关资源。其实现流程如图6.5所示。图6.5 基于UdpClient的编程流程第第6 6章章 TCP/UDPTCP/UDP编程编程 29296.4 .NET6.4 .NET中的中的UDPUDP编程基础编程基础 6.4.1 UdpClient类1创建UdpCli

45、ent实例 UdpClient提供了 3种构造函数的重载方式来创建UdpClient实例,根据传入参数的不同完成不同的创建形式,如下所述。UdpClient(),以缺省方式初始化UdpClient的新实例,IP地址和端口号皆由系统自动指定。UdpClient(AddressFamily),以指定的地址族初始化UdpClient的新实例。UdpClient(Int32),以指定的端口号初始化UdpClient的新实例。UdpClient(IPEndPoint),以指定的本地终结点初始化UdpClient类的新实例。UdpClient(Int32,AddressFamily),以指定的端口号和地址

46、族初始化UdpClient的新实例。UdpClient(String,Int32),以指定的远程主机名和端口号初始化UdpClient的新实例,并建立默认远程主机。其中,UdpClient(String,Int32)重载形式在完成UdpClient实例初始化的同时也完成了远程主机连接信息的指定。2指定连接信息 因为UDP是无连接传输协议,所以不需要在发送和接收数据前建立远程主机连接。但可以选择使用下面两种方法之一来指定默认远程主机:使用远程主机名和端口号作为参数创建UdpClient类的实例。创建UdpClient类的实例,然后调用Connect方法。第第6 6章章 TCP/UDPTCP/UD

47、P编程编程 30306.4 .NET6.4 .NET中的中的UDPUDP编程基础编程基础 6.4.1 UdpClient类 如果在创建UdpClient实例时没有指定远程主机信息,那么可以在发送数据前通过UdpClient的Connect方法先指定远程主机的地址和端口号,即指定连接信息。但是如果只需要接收数据,则不需要进行指定连接的操作。对于连接信息的指定,主要包括三种方式,即直接在UdpClient的构造函数中指定,通过调用Connect方法指定和直接在Send方法中指定。而Connect方法又有三种重载形式,如下:UdpClient.Connect(IPEndPoint),使用指定的远程主

48、机信息建立默认远程主机。UdpClient.Connect(IPAddress,Int32),使用指定的IP地址和端口号建立默认远程主机。UdpClient.Connect(String,Int32),使用指定的主机名和端口号建立默认远程主机。下面的代码段实现了UdpClient实例创建和连接信息指定操作。IPAddress m_ipA=IPAddress.Parse(m_hostIP);m_EndPoint=new IPEndPoint(m_ipA,m_port);m_client=new UdpClient();/创建UdpClient实例m_client.Connect(m_EndPoi

49、nt);/指定连接信息3数据发送和接收UdpClient实例创建后便可以进行数据发送和接收操作,如图6.5所示。UdpClient中提供了Send方法来完成数据发送操作,其重载形式有如下三种。第第6 6章章 TCP/UDPTCP/UDP编程编程 31316.4 .NET6.4 .NET中的中的UDPUDP编程基础编程基础 6.4.1 UdpClient类 UdpClient.Send(Byte,Int32),将UDP数据报发送到默认的远程主机。UdpClient.Send(Byte,Int32,IPEndPoint),将UDP数据报发送到位于指定远程终结点的主机。UdpClient.Send(

50、Byte,Int32,String,Int32),将UDP数据报发送到指定的远程主机上的指定端口。因此,数据发送操作既可以在先指定连接信息的情况下给出发送数据及其长度进行发送,也可以由Send方法来指定远程主机的端口信息以及发送数据和长度进行发送。如下所示。m_client.Send(data,data.Length);/在指定了连接信息后,直接给出数据及其长度进行发送在UdpClient中提供了Receive方法来完成数据的接收操作,其申明形式如下:byte Receive(ref IPEndPoint remoteEP)。在接收缓冲区没有数据时,Receive 方法将阻止,直到数据报从远程

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(网络编程技术教程课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|