第10章--c#网络通信编程技术

上传人:小** 文档编号:58218022 上传时间:2018-10-27 格式:PPT 页数:31 大小:1.05MB
返回 下载 相关 举报
第10章--c#网络通信编程技术_第1页
第1页 / 共31页
第10章--c#网络通信编程技术_第2页
第2页 / 共31页
第10章--c#网络通信编程技术_第3页
第3页 / 共31页
第10章--c#网络通信编程技术_第4页
第4页 / 共31页
第10章--c#网络通信编程技术_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《第10章--c#网络通信编程技术》由会员分享,可在线阅读,更多相关《第10章--c#网络通信编程技术(31页珍藏版)》请在金锄头文库上搜索。

1、第10章 C#网络通信编程技术,10.1 网络通信的方式,10.2 Dns类,10.3 System.Net.Sockets命名空间,10.4 开发网络通信应用程序,10.5 综合应用,10.1 网络通信的方式,(1)同步方式 同步方式是指发送方发送数据包以后,不等接收方响应,就接着发送下一个数据包。 (2)异步方式 异步方式是指当发送方发送一个数据包以后,一直等到接收方响应后,才可以发送下一个数据包。 (3)阻塞套接字 阻塞套接字是指在执行此套接字的网络调用时,直到调用成功才返回,否则此套接字就一直阻塞在网络调用上。 (4)非阻塞套接字 非阻塞套接字是指在执行此套接字的网络调用时,不管是否执

2、行成功,都立即返回。,10.2 Dns类,Dns类的常用方法及说明如表10.1所示。,表10.1 Dns类的常用方法及说明,10.2 Dns类,【例EX10_1】设计WinForm应用程序用于获取指定主机名的IP地址。 设计步骤如下: (1)新建WinForm项目 新建WinForm项目并命名为“EX10_1”。 (2)添加控件并设置属性 在Form1的设计视图中将此窗体调整到适当的大小并将 “Text”属性设置为“获取主机IP地址”。从工具箱中拖曳1个Button、2个Label和2个TextBox控件到窗体中,如图10.1所示布局控件。将label1、label2和button1的Text

3、属性值分别设置为“主机名”、“IP地址:”和“获取”。 (3)添加命名空间 所要添加的命名空间为“using System.Net;”。,10.2 Dns类,(4)添加事件及代码 双击“获取”按钮,其事件代码如下所示:private void button1_Click(object sender, EventArgs e)textBox2.Text = “;tryIPHostEntry hostInfo = Dns.GetHostEntry(textBox1.Text.Trim();foreach (IPAddress ipadd in hostInfo.AddressList) textB

4、ox2.Text += ipadd.ToString() + “rn“; catch (Exception ex) MessageBox.Show(ex.Message.ToString(); ,10.2 Dns类,(5)运行程序 按“Ctrl+F5”组合键运行程序,分别输入“”和“”,单击“获取”按钮,结果如图10.1和图10.2所示。,图10.1 “”的IP地址 图10.2 “”的IP地址,10.3 System.Net.Sockets命名空间,(1)Socket类:用于管理连接,实现Berkeley通信端接口,定义绑定、连接网络端点以及传输数据所需的方法,提供处理端点连接传输等细节所需要

5、的功能。WebRequest、TcpClient和UdpClinet等类在内部使用这个类。 (2)TcpClient类:允许创建和使用TCP连接,该类创建于Socket类的基础之上并且封装了许多更高级的功能,避免开发人员处理连接操作的相关细节。 (3)TcpListener类:允许监听传入的TCP连接请求,监听来自TCP客户端应用程序的连接要求,封装更高级的功能,使用这个类可以让用户避免处理一些连接服务的细节,以一种比较有效的方式,接收监听的连接需求。 (4)UdpClinet类:提供用户数据报(UDP)网络服务。 (5)NetWorkStream类:这个类是从Stream派生出来的,专门用以

6、处理网络形式的数据流,与其他文件数据流的显著区别在于,这个类接收Socket类对象参数,对网络数据进行存取操作。,10.3.1 套接字(Socket),应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口,如图10.3所示。,图10.3 套接字示意图,10.3.1 套接字(Socket),在基于TCP/IP的网络上进行通信的关键代码如下: Socket soc

7、ket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 使用UDP而不是TCP进行通信的关键代码如下: Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 参数说明如下: (1)AddressFamily:AddressFamily枚举,用来指定Socket类解析网络地址的标准地址族。 (2)SocketType:SocketType枚举,用来指定套接字的

8、类型。 (3)ProtocolType:ProtocolType枚举,用来指定在Socket上通信时使用的网络协议。 创建Socket类后,既可以开始与远程终结点的连接,也可以接收来自远程设备的连接。,10.3.2 Socket类的属性和方法,连接创建完毕,就可以使用其Send或SendTo方法将数据发送到Socket;同样使用其Receive或ReceiveFrom方法从Socket中读取数据。在Socket使用完毕后,应使用其Shutdown方法禁用Socket,并使用Close方法关闭Socket。表10.2和表10.3分别是Socket类中的常用属性和方法及其简要说明。 【例EX10_

9、2】设计WinForm应用程序将小写字母转换为大写字母,其中包括客户端和服务端,利用Socket将要转换的小写字母发送给服务端,服务端将接收到的小写字母转换为大写字母并返回给客户端。 设计步骤如下: (1)新建客户端WinForm项目 新建WinForm项目并命名为“EX10_2_client”。 (2)添加控件并设置属性 在Form1的设计视图中将此窗体调整到适当的大小并将 “Text”属性设置为“客户端”。从工具箱中拖曳1个Button、2个Label和2个TextBox控件到窗体中,如图10.4所示布局控件。将label1、label2和button1的Text属性值分别设置为“发送的字

10、符串:”、“接收并转换为大写的字符串:”和“转换”。,10.3.2 Socket类的属性和方法,(3)添加命名空间 所要添加的命名空间为: using System.Net; using System.Net.Sockets; (4)添加事件及代码 双击“转换”按钮,其事件代码如下所示。 (5)新建服务端WinForm项目 新建WinForm项目并命名为“EX10_2_server”。 (6)添加控件并设置属性 在Form1的设计视图中将此窗体调整到适当的大小并将 “Text”属性设置为“服务端”。从工具箱中拖曳1个Button、1个Label和1个TextBox控件到窗体中,如图10.5所示

11、布局控件。将label1和button1的Text属性值分别设置为“从客户端接收的字符串:”、“开始监听”。 (7)添加命名空间 所要添加的命名空间为: using System.Net; using System.Net.Sockets;,10.3.2 Socket类的属性和方法,(8)添加事件及代码 双击“开始监听”按钮,其事件代码如下所示。 (9)运行程序 运行这两个程序,单击服务端的“开始监听”按钮,在客户端中输入一些小写字符串并单击“转换”按钮,结果如图10.4和图10.5所示。,图10.4 客户端 图10.5 服务端,10.4 开发网络通信应用程序,10.4.1 TcpClient

12、类 为使TcpClient连接并交换数据,使用TCP协议创建的TcpListener或Socket必须监听是否有传入的连接请求。可以使用下面两种方法之一连接到该监听器: (1)创建一个TcpClient,并调用三个可用的Connect方法之一:TcpClient tcpClient=new TcpClient(); /创建一个TcpClient/*使用下面三种方法之一连接到监听器*/tcpClient.Connect (IPAddress, Int32) /使用指定的 IP地址和端口号将客户端连接到 TCP 主机tcpClient.Connect (IPAddress, Int32) /使用指

13、定的IP地址和端口号将客户端连接到远程TCP主机tcpClient.Connect (String, Int32) /将客户端连接到指定主机上的指定端口,10.4.1 TcpClient类,(2)使用远程主机的主机名和端口号创建TcpClient。此构造函数将自动尝试一个连接。TcpClient client = new TcpClient(hostname, port); 要发送和接收数据,可以使用GetStream方法来获取一个NetworkStream,调用NetworkStream的Write和Read方法与远程主机之间发送和接收数据。使用Close方法释放与TcpClient关联的所

14、有资源。 TcpClient的常用属性及说明如表10.4所示,常用方法及说明如表10.5所示。,10.4.2 TcpListener类,TcpListener类从TCP网络客户端监听连接。TcpListener类提供一些简单方法,用于在阻塞同步模式下监听和接收传入连接请求。可使用IPEndPoint、本地IP地址及端口号或者仅使用端口号,来创建TcpListener。创建监听器的两种方法如下: (1)使用指定的本地终结点初始化TcpListener类的新实例。 TcpListener tcpListener=new TcpListener (IPEndPoint) (2)使用指定的本地IP地址

15、和端口号,监听是否有传入的连接尝试。TcpListener tcpListener=new TcpListener (IPAddress, Int32) 可使用TcpClient或Socket来连接TcpListener。可以将本地IP地址指定为Any,将本地端口号指定为0(如果希望基础服务提供程序为程序员分配这些值)。如果这样做,可在连接套接字后使用LocalEndpoint 属性来标识已指定的信息。,10.4.2 TcpListener类,Start方法用来开始监听传入的连接请求。Start 将对传入连接进行排队,直至调用Stop方法或它已经完成MaxConnections排队为止。可使用

16、 AcceptSocket或AcceptTcpClient从传入连接请求队列中提取连接。这两种方法将阻止。如果要避免阻止,可首先使用Pending方法来确定队列中是否有可用的连接请求。TcpListener类的常用属性和方法及说明如表10.6和表10.7所示。,10.4.3 NetWorkStream类,以下是创建NetworkStream的几种方法。 (1)为指定的Socket创建NetworkStream类的新实例。 NetworkStream networkStream=new NetworkStream (Socket) (2)用指定的Socket 所属权为指定的Socket初始化Ne

17、tworkStream类的新实例。 NetworkStream networkStream=new NetworkStream (Socket, Boolean) (3)用指定的访问权限为指定的Socket 创建NetworkStream类的新实例。 NetworkStream networkStream=new NetworkStream (Socket, FileAccess) (4)用指定的访问权限和指定的Socket所属权为指定的Socket创建NetworkStream类的新实例。 NetworkStream networkStream=new NetworkStream (Socket, FileAccess, Boolean),

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号