收藏 分享(赏)

第10章--C#网络通信编程技术.ppt

上传人:weiwoduzun 文档编号:4299927 上传时间:2018-12-21 格式:PPT 页数:31 大小:1.05MB
下载 相关 举报
第10章--C#网络通信编程技术.ppt_第1页
第1页 / 共31页
第10章--C#网络通信编程技术.ppt_第2页
第2页 / 共31页
第10章--C#网络通信编程技术.ppt_第3页
第3页 / 共31页
第10章--C#网络通信编程技术.ppt_第4页
第4页 / 共31页
第10章--C#网络通信编程技术.ppt_第5页
第5页 / 共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 (Sock

18、et, FileAccess, Boolean),10.4.3 NetWorkStream类,NetworkStream不支持对网络数据流的随机访问。CanSeek属性用于指示流是否支持查找,它的值始终为false。读取Position属性、读取Length属性或者调用 Seek方法都会引发NotSupportedException异常。NetworkStream类的常用属性和方法及说明如表10.8和表10.9所示。 【例EX10_3】设计WinForm应用程序发送并接收文件,其中包括发送文件和接收文件两端。 设计步骤如下: (1)新建发送文件端WinForm项目 新建WinForm项目并命名

19、为“EX10_3_sendfile”。 (2)添加控件并设置属性 在Form1的设计视图中将此窗体调整到适当的大小并将 “Text”属性设置为“发送文件”。从工具箱中拖曳1个Button控件到窗体中,如图10.6所示布局控件。将button1的Text属性值设置为“选择文件并发送”。,10.4.3 NetWorkStream类,(3)添加命名空间 所要添加的命名空间为: using System.Net; using System.Net.Sockets; using System.IO; (4)添加事件及代码 双击“选择文件并发送”按钮,其事件代码如下所示。 (5)新建接收文件端WinFor

20、m项目 新建WinForm项目并命名为“EX10_3_receivefile”。 (6)设置属性 此窗体在运行时是不可见的,将Form1的“Text”属性设置为“接收文件”。,10.4.3 NetWorkStream类,(7)添加命名空间 所要添加的命名空间为: using System.Net; using System.Net.Sockets; using System.IO; (8)添加事件及代码 双击Form1窗体,其事件代码如下所示。,10.4.3 NetWorkStream类,(9)运行程序 运行这两个程序,单击发送文件端的“选择文件并发送”按钮,弹出打开文件对话框,选择要发送的文

21、件,此时接收文件端弹出保存文件对话框,输入要保存文件的文件名和后缀名,单击“保存”按钮,则文件接收成功。发送文件端运行的结果如图10.6所示。按“Ctrl+Alt+Del”组合键打开Windows任务管理器,关闭接收端进程,如图10.7所示。,图10.6 发送文件端 图10.7 Windows任务管理器,10.4.4 UdpClient类,UdpClient类是提供用户数据报(UDP)网络服务的。UdpClient类提供了一些简单的方法,用于在阻塞同步模式下发送和接收无连接UDP数据报。因为UDP是无连接传输协议,所以不需要在发送和接收数据前建立远程主机连接。但可以选择使用下面两种方法之一来建

22、立默认远程主机: (1)使用远程主机名和端口号作为参数创建UdpClient类的实例。UdpClient udpClient=new UdpClient(hostname,port) (2)创建UdpClient类的实例,然后调用Connect方法。UdpClient udpClient=new UdpClient();/*使用下面三种方法之一建立默认远程主机*/udpClient.Connect (IPEndPoint) /使用指定的网络终结点建立默认远程主机udpClient.Connect (IPAddress, Int32) /使用指定的IP地址和端口号建立默认远程主机udpClien

23、t.Connect (String, Int32) /使用指定的主机名和端口号建立默认远程主机,10.4.4 UdpClient类,可以使用在UdpClient中提供的任何一种发送方法将数据发送到远程设备。使用 Receive方法可以从远程主机接收数据。UdpClient类的常用属性和方法及说明如表10.10和表10.11所示。 【例EX10_4】设计WinForm应用程序发送广播信息并接收广播信息,其中包括服务端和接收客户端,服务端用于发送广播信息而客户端用于接收广播信息。 设计步骤如下: (1)新建服务端WinForm项目 新建WinForm项目并命名为“EX10_4_server”。 (

24、2)添加控件并设置属性 在Form1的设计视图中将此窗体调整到适当的大小并将 “Text”属性设置为“服务端”。从工具箱中拖曳1个Button、1个Label和1个Textbox控件到窗体中,如图10.8所示布局控件。将button1的Text属性值设置为“开始广播”。,10.4.4 UdpClient类,(3)添加命名空间 所要添加的命名空间为: using System.Net; using System.Net.Sockets; (4)添加事件及代码 双击“开始广播”按钮,其事件代码如下所示: private void button1_Click(object sender, Event

25、Args e) UdpClient udpClient = new UdpClient(); try udpClient.Connect(IPAddress.Parse(“192.168.101.255“), 5000); Byte sendBytes = Encoding.ASCII.GetBytes(textBox1.Text.Trim(); udpClient.Send(sendBytes, sendBytes.Length); /发送信息udpClient.Close(); catch (Exception ex) Console.WriteLine(ex.Message.ToStri

26、ng(); ,10.4.4 UdpClient类,(5)新建客户端WinForm项目 新建WinForm项目并命名为“EX10_4_client”。 (6)设置属性 在Form1的设计视图中将此窗体调整到适当的大小并将 “Text”属性设置为“客户端”。从工具箱中拖曳1个Button、1个Label和1个Textbox控件到窗体中,如图10.9所示布局控件。将button1的Text属性值设置为“开始监听”。 (7)添加命名空间 所要添加的命名空间为: using System.Net; using System.Net.Sockets;,10.4.4 UdpClient类,(8)添加事件及代

27、码 双击Form1窗体,其事件代码如下所示: private void Form1_Load (object sender, EventArgs e) UdpClient udpClient = new UdpClient(5000); try IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); Byte receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); /接收消息string returnData = Encoding.ASCII.GetString(re

28、ceiveBytes);textBox1.Text = “消息来源IP:“ + RemoteIpEndPoint.Address.ToString() +“端口号:“+ RemoteIpEndPoint.Port.ToString()+“rn内容:“+returnData.ToString();udpClient.Close(); /释放对象catch (Exception ex) Console.WriteLine(ex.Message); ,10.4.4 UdpClient类,(9)运行程序 运行这两个程序,单击客户端的“开始监听”按钮,开始监听广播信息。在服务端中输入“今天下午3点钟有会

29、!”并单击“开始广播”按钮,如图10.8所示。客户端接收消息并显示,如图10.9所示。,图10.8 服务端 图10.9 客户端,10.5 综合应用,【例EX10_5】设计点对点聊天WinForm应用程序,当采用如图10.10所示的这种模式时,就是所谓的完全点对点模式,此时每台计算机本身也是服务器,因为它需要进行端口的监听。,图10.10 点对点聊天示意图,10.5 综合应用,设计步骤如下: (1)新建服务端WinForm项目 新建WinForm项目并命名为“EX10_5”。 (2)添加控件并设置属性 在Form1的设计视图中将此窗体调整到适当的大小并将“Text”属性设置为“聊天系统”。从工具

30、箱中拖曳3个Button、4个Label、4个Textbox和1个StatusStrip控件到窗体中,如图10.11所示布局控件。textBox1、textBox2、textBox3和textBox4分别用于输入目标计算机地址、昵称、发送内容和接收聊天内容。将label1、label2、label3和label4的Text属性值分别设置为“目标计算机地址”、“昵称”、“发送内容”和“聊天内容”。将button1、button2和button3的Text属性值分别设置为“开始监听”、“停止监听”和“发送信息”。在状态栏statusStrip1中添加1个toolStripStatusLabel。,

31、10.5 综合应用,(3)添加命名空间 所要添加的命名空间为: using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; (4)添加事件及代码 切换到窗体设计器中,分别双击3个按钮,添加事件及代码,代码如下所示。,10.5 综合应用,(5)运行程序 按“Ctrl+F5”组合键运行此程序,为了方便,在这里目标计算机IP地址就输入本机IP地址“192.168.101.204”,昵称设置为“沙漠之鹰”,单击“开始监听”按钮,输入发送内容,单击“发送消息”按钮,结果如图10.11所示。,图10.11 聊天系统,

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

当前位置:首页 > 网络科技 > 网络与通信

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报