C程序设计 第八章 网络程序设计

上传人:沈*** 文档编号:244600792 上传时间:2024-10-05 格式:PPT 页数:45 大小:239KB
返回 下载 相关 举报
C程序设计 第八章 网络程序设计_第1页
第1页 / 共45页
C程序设计 第八章 网络程序设计_第2页
第2页 / 共45页
C程序设计 第八章 网络程序设计_第3页
第3页 / 共45页
点击查看更多>>
资源描述
,*,版权所有,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,C#,程序设计与案例教程 清华大学出版社,第八章 网络程序设计,在分布式应用程序中,基于客户端和服务器的各种网络编程序技术应用非常广泛。,C#,对网络程序设计提供了强大的支持,在,System.Net,命名空间中包含了许多用于网络程序设计的类。,1,版权所有,目录,网络程序设计基础,面向连接的套接字,面向无连接的套接字,2,版权所有,8.1,网络程序设计基础,System.Net,命名空间为当前网络上使用的多种协议提供了简单的编程接口。,8.1.1,网络协议,网络协议是网络上计算机为交换数据所必须遵守的通信规范和消息格式的集合。目前常用的网络协议有,TCP,协议和,UDP,协议。,3,版权所有,1.TCP,协议,TCP,是,Tranfer,Control Protocol,的简称,是一种面向连接的保证可靠传输的协议。通过,TCP,协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个,Socket,之间必须建立连接,以便在,TCP,协议的基础上进行通信,当一个,Socket,(通常都是,Server Socket,)等待建立连接时,另一个,Socket,可以请求连接,一旦这两个,Socket,连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。,4,版权所有,2.UDP,协议,UDP,是,User Datagram Protocol,的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。使用,UDP,时,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。使用,TCP,协议,由于它是一个面向连接的协议,在,Socket,之间进行数据传输之前必然要建立连接,所以在,TCP,中多了一个连接建立的时间。,5,版权所有,8.1.2,有关的概念,1,IP,地址,标识计算机等网络设备的网络地址,由四个,8,位的二进制数组成,中间以小数点分隔。如:,166.111.136.3,166.111.52.80,2,主机名,(hostname),网络地址的助记名,按照域名进行分级管理。如:,6,版权所有,3,端口号,(port number),网络通信时同一机器上的不同进程的标识。如,:,80,,,21,,,23,,,25,,其中,11024,为系统保留的端口号,4,服务类型,(service),网络的各种服务。如:,http,telnet,ftp,smtp,5,协议名(,protocol,),指明获取资源所使用的传输协议,如:,http,、,ftp,、,gopher,、,file,7,版权所有,6,资源名(,resourceName,),是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如:,/,协议名,:/,主机名,Socket(,AddressFamily,addressFamily,SocketType,socketType,ProtocolType,protocolType,);,addressFamily,参数指定,Socket,使用的寻址方案,,socketType,参数指定,Socket,的类型,,protocolType,参数指定,Socket,使用的协议。对于网络上的,IP,通信来说,,addressFamily,总是使用,AddressFamily.InterNetwork,枚举值。,11,版权所有,12,版权所有,与,Socket,相关的操作:,(,1,)接受请求,Socket Accept();/,创建一个套接字来处理到来的连接请求。,(,2,)绑定地址,void,Bind(IPEndPoint,localEP,);/,使,Socket,与一个本地终结点相关联。,如果需要使用特定的本地终结点,请使用,Bind(),方法。必须先调用,Bind(),,然后才能调用,Listen(),方法。如果不介意分配哪个本地地址,则可以用,IPAddress.Any,作为地址参数创建一个,IPEndPoint,,这样,基础服务提供程序将会分配最适合的网络地址。,13,版权所有,(,3,)建立连接,void,Connect(IPEndPoint,ip,);,用来与远程服务器建立连接。连接之后,可以用,Send(),发送数据或用,Receive(),函数接收数据。,(,4,)监听请求,void,Listen(int,backlog);/backlog,指定队列中最多可容纳的等待接受的传入连接数。,设置套接字处于监听状态。当数据到达某个端口时,它会向主机发送通知消息。,14,版权所有,(,5,)发送数据,使用,Send(),或,SendTo,(),方法,。,int,Send(byte,buffer);,int,SendTo(byte,buffer,IPEndPoint,remoteIP,);/,向指定的地址发送数据,发送数据还可以使用,NetWorkStream,对象。创建,NetWorkStream,对象的方法是:,NetWorkStream,netstream,=new,NetWrokStream(clientSocket,);,String message=“,发送的信息”;,Byte b=,System.Text.Encoding.Unicode.GetBytes(message,);,netstream.Write(b,0,b.Length);,15,版权所有,(,6,)接受数据,使用,Receive(),或,ReceiveFrom,(),接收数据。,int,Receive(byte,buffer);,int,Receive(byte,buffer,ref,IPEndPoint,ip,),(,7,)关闭,使用,Shutdown(),关闭套接字,。,public,void,Shutdown(,SocketShutdown,how,);,how,指定不再允许执行的操作,,16,版权所有,17,版权所有,8.1.5,网络流,(,NetworkStream,),NetworkStream,类提供用于网络访问的基础数据流。它提供了在阻塞模式下通过,Stream,套接字发送和接收数据的方法。要创建,NetworkStream,,必须提供连接的,Socket,。也可指定,NetworkStream,对所提供的,Socket,具有哪些,FileAccess,权限。默认情况下,关闭,NetworkStream,并不会关闭所提供的,Socket,。如果要使,NetworkStream,拥有关闭所提供的,Socket,的权限,则必须将,ownsSocket,构造函数参数的值指定为,true,。,该类的,Write(),和,Read(),方法用于简单的单线程同步阻塞,I/O,。若要使用不同的线程来处理,I/O,,则请考虑使用,BeginWrite,()/,EndWrite,(),和,BeginRead,()/,EndRead,(),方法进行通信。,18,版权所有,1,NetworkStream,的构造函数,(,1,),public,NetworkStream(Socket,),:为指定的,Socket,创建,NetworkStream,类的新实例。,(,2,),public,NetworkStream(Socket,bool,),:用指定的,Socket,所属权为指定的,Socket,初始化,NetworkStream,类的新实例。,(,3,),public,NetworkStream(Socket,FileAccess,),:用指定的访问权限为指定的,Socket,创建,NetworkStream,类的新实例。,(,4,),public,NetworkStream(Socket,FileAccess,bool,),:用指定的访问权限和指定的,Socket,所属权为指定的,Socket,创建,NetworkStream,类的新实例。,2,NetworkStream,类的主要成员,19,版权所有,8.2,面向连接的套接字,IP,连接领域有两种通信类型:面向连接的和无连接的。在面向连接的套接字中,使用,TCP,协议来建立两个,IP,地址端点之间的会话。一旦建立了这种连接,就可以在设备之间可靠地传输数据。在使用套接字通信过程中主动发起通信的一方被称为客户端,接受请求进行通信的一方称为服务器。为了建立面向连接的套接字,服务器和客户端必须分别进行编程。,20,版权所有,8.2.1,面向连接的套接字程序基本结构,21,版权所有,1,服务器端程序的基本结构,(,1,)建立套接字。,(,2,)将套接字绑定到用于,TCP,通信的本地,IP,地址和端口上。,(,3,)设置套接字处于监听状态。,(,4,)等待用户请求。,(,5,)有用户请求,可以发送数据或接受数据。,(,6,)关闭套接字。,22,版权所有,2.,客户端程序的基本结构,(,1,)建立套接字。,(,2,)与服务器进行连接。,(,3,)发送或接受数据。,(,4,)关闭套接字。,23,版权所有,【,案例,8-1,】,一个简单,TCP/IP,客户,/,服务器程序。,本案例建立一个控制台程序,服务器程序启动后,等待客户连接,客户程序启动后主动与服务器连接,连接成功服务器向客户端发送信息“连接成功!”,客户端接到信息后向服务器发送信息“服务器你好”,服务器再向客户端发送信息“客户你好“。运行界面如图,8-2,所示,(,a,)为服务器,(,b,)为客户端。,24,版权所有,8.2.2,使用同步套接字,在通过,Socket,进行连接、接收、发送操作时,客户机或服务器会暂停当前工作,处于等待状态,即一直等有数据时才继续执行下面的语句。一般在阻塞方式下使用这种方式。可见,同步套接字适用于网络传输量不大的情况。当网络传输量很大时,长时间的等待可能回让用户无法忍受,这时需要使用异步套接字。,25,版权所有,【,案例,8-2,】,使用同步套接字。,本案例创建一个接收来自客户端的连接请求的服务器。该服务器是用同步套接字生成的,因此在等待来自客户端的连接时挂起服务器应用程序的执行。该应用程序接收来自客户端的字符串,在控制台显示该字符串,然后将该字符串回显到客户端。来自客户端的字符串必须包含字符串“,”,,以发出表示消息结尾的信号。客户端是用同步套接字生成的,因此挂起客户端应用程序的执行,直到服务器返回响应为止。该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串。运行界面如图,8-3,所示,(,a,)为服务器,(,b,)为客户端。,26,版权所有,8.2.3,使用,TcpListener,和,TcpClient,在,System.Net.Sockets,.,命名空间下,有两个专门用于,TCP,协议编程的类:,TCPClient,和,TCPListener,类。这两个类提供了直观的容易使用的属性和方法,从而降低了,TCP,协议编程的难度。,27,版权所有,1.,TcpListener,类,TcpListener,类提供一些简单方法,用于在阻塞同步模式下侦听和接受传入连接请求。客户端使用,TcpClient,或,Socket,来连接,TcpListener,。可使用,IPEndPoint,、本地,IP,地址及端口号或者仅使用端口号,来创建,TcpListener,。可以将本地,IP,地址指定为,Any,,将本地端口号指定为,0,(如果希望基础服务提供程序为您分配这些值)。如果选择这样做,可使用,LocalEndpoint,来标识已指定的信息。,28,版权所有,Start(),方法用来开始侦听传入的连接请求。,Start(),将对传入连接进行排队,直至您调用,Stop(),方法或它已经完成,MaxConnect
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!