《套接字与数据流》PPT课件.ppt
《《套接字与数据流》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《套接字与数据流》PPT课件.ppt(49页珍藏版)》请在三一办公上搜索。
1、第4章 套接字与数据流,4.1 套接字4.1.1 面向连接的套接字 4.1.2 无连接的套接字4.2 数据流4.2.1 文件流4.2.2 内存流4.2.3 网络流4.2.4 StreamWriter与StreamReader类4.2.5 BinaryReader与BinaryWriter类,本章教学目的学习套接字编程的基本方法,以及数据流相关类的用法。本章教学要求(1)掌握套接字的概念及Socket类用法;(2)掌握面向连接套接字编程、无连接套接字编程基本步骤(3)掌握FileStream、MemoryStream、NetworkStream类的用法;(4)掌握StreamReader、Str
2、eamWriter、BinaryReader、BinaryWriter类的基本用法。,本章重点,4.1 套接字,一个连接由它的两个端点标识,这样的端点称为套接字。,4.1 套接字(续),套接字是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点。上图连接1的一对套接字为:(,5000)和(,8888)上图连接2的一对套接字为:(,5001)和(,8888)对于UDP协议尽管两个进程之间没有建立连接,但是也同样存在发送端点,和接收端点,也同样使用套接字的概念。,4.1 套接字(续),套接字的类型有:流式套接字:提供了面向连接的、可靠的、数据无错并且无
3、重复的数据发送服务,而且接收数据的顺序和发送数据的顺序是相同的。数据报套接字:提供了面向无连接的服务,它以独立的数据包形式发送数据(数据包长度不能大于32KB),不提供正确性检查,也不保证各数据包的发送顺序和接收顺序相同,因此,可能出现数据的重发、丢失等现象。原始套接字:用于直接访问协议的较低层。常用于检验新的协议实现或访问现有服务中配置的新设备,一般不提倡直接使用原始套接字。,4.1 套接字(续),Socket类包含在命名空间中。一个Socket实例包含了一个本地或者一个远程端点的套接字信息。使用Socket类编程,由于很多细节都需要自己考虑,相对来说复杂一些,易出错。一般对套接字编程比较熟
4、悉的人,或者使用非标准协议(自定义的新协议)进行编程的时候,才使用Socket类。Socket类的构造函数为:public Socket(AddressFamily addressFamily,/网络类型 SocketType socketType,/套接字类型 ProtocolType protocolType);/使用的协议,4.1 套接字(续),参数含义:(1)addressFamily addressFamily表示网络类型,该参数使用AddressFamily枚举指定Socket使用的寻址方案例如AddressFamily.InterNetwork表示IP版本4的地址。,4.1 套接
5、字(续),4.1 套接字(续),(2)socketTypesocketTyp指定Socket的类型,该参数使用SocketType枚举指定使用哪种套接字。例如:SocketType.Stream表明连接是基于流套接字的SocketType.Dgram表示连接是基于数据报套接字SocketType.Raw表示连接基于原始套接字;详细见课本表4-2,4.1 套接字(续),(3)protocolTypeprotocolType指定Socket使用的协议,该参数使用ProtocolType枚举指定使用哪种协议。例如:ProtocolType.Tcp表明连接协议是TCPProtocolType.Udp表
6、明连接协议是UDP详细见课本表4-3,4.1 套接字(续),Socket构造函数的三个参数中,对于网络上的IP通信来说,AddressFamily总是使用AddressFamily.InterNetwork枚举值。而SocketType参数则与ProtocolType参数配合使用,不允许其他的匹配形式,也不允许混淆匹配。下表列出了可用于IP通信的组合。,4.1.1 面向连接的套接字,IP连接领域有两种通信类型:面向连接的(connection-oriented)无连接的(connectionless)。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监
7、听客户端请求连接确认,4.1.1 面向连接的套接字,服务器监听:是指服务器套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器套接字的地址和端口号,然后再向服务器套接字提出连接请求。连接确认:是指当服务器套接字监听到客户端套接字的连接请求时,它就响应客户端套接字的请求,把服务器套接字的信息发给客户端,一旦客户端确认了此信息,连接即可建立。而服务器套接字继续监听其他客户端套接字的连接请求。,4.1.1 面向连接的套接字,4.1.1
8、 面向连接的套接字,同步TCP编写服务器端程序的一般步骤为:1)创建一个包含采用的网络类型、数据传输类型和协议类型的本地套接字对象,并将其与服务器的IP地址和端口号绑定。这个过程可以通过Socket类。2)在指定的端口进行监听,以便接受客户端连接请求。3)一旦接受了客户端的连接请求,就根据客户端发送的连接信息创建与该客户端对应的Socket对象。4)根据创建的Socket对象,分别与每个连接的客户进行数据传输。5)根据传送信息情况确定是否关闭与对方的连接。,4.1.1 面向连接的套接字,使用同步TCP编写客户端程序的一般步骤为:1)创建一个包含传输过程中采用的网络类型、数据传输类型和协议类型的
9、Socket对象。2)与远程服务器建立连接。3)与服务器进行数据传输。4)完成工作后,向服务器发送关闭信息,并关闭与服务器的连接。,4.1.1 面向连接的套接字(续),1.建立连接(服务器)IPHostEntry local=Dns.GetHostByName(Dns.GetHostName();IPEndPoint iep=new IPEndPoint(local.AddressList0,1180);Socket localSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);loc
10、alSocket.Bind(iep);locatSocket.Listen(10);Socket clientSocket=localSocket.Accept();,4.1.1 面向连接的套接字(续),1.建立连接(客户端)IPAddress remoteHost=IPAddress.Parse(192.168.0.1);PEndPoint iep=new IPEndPoint(remoteHost,1180);Socket localSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp
11、);localSocket.Connect(iep);,4.1.1 面向连接的套接字(续),2.发送、接收信息(服务器)Socket clientSocket=localSocket.Accept();/建立连接后,利用Send方法向客户端发送信息clientSocket.Send(Encoding.ASCII.GetBytes(server send Hello);/接收客户端信息byte myresult=new Byte1024;int receiveNum=clientSocket.Receive(myresult);Console.WriteLine(接收客户端消息:0,Encodi
12、ng.ASCII.GetString(myresult);,4.1.1 面向连接的套接字(续),2.发送、接收信息(客户端)/建立连接成功后,向服务器发送信息string sendMessage=client send Message Hello+DateTime.Now;localSocket.Send(Encoding.ASCII.GetBytes(sendMessage);Console.WriteLine(向服务器发送消息:0,sendMessage);/接收服务器信息byte result=new Byte1024;localSocket.Receive(result);Consol
13、e.WriteLine(接收服务器消息:0,Encoding.ASCII.GetString(result);,4.1.1 面向连接的套接字(续),3.关闭连接通信完成后,必须先用Shutdown方法停止会话,然后关闭Socket实例。例如:sock.Shutdown(SocketShutdown.Both);sock.Close();,4.1.2 无连接的套接字,UDP使用无连接的套接字,无连接的套接字不需要在网络设备之间发送连接信息。注意:必须使用Bind方法将套接字绑定到一个本地地址和端口之后才能使用ReceiveFrom方法接收数据,如果只发送而不接收,则不需要使用Bind方法。,4.
14、1.2 无连接的套接字,第4章 套接字与数据流,4.1 套接字4.1.1 面向连接的套接字 4.1.2 无连接的套接字4.2 数据流4.2.1 文件流4.2.2 内存流4.2.3 网络流4.2.4 StreamWriter与StreamReader类4.2.5 BinaryReader与BinaryWrite类,4.2 数据流,流(stream)是对串行传输的数据(以字节为单位)的一种抽象表示,底层的设备可以是文件、外部设备、主存、网络套接字等。,4.2 数据流,流提供三种基本操作:写入:将数据从内存缓冲区传输到外部源。读取:将数据从外部源传输到内存缓冲区。查找:重新设置流的当前位置,以便随机
15、读写。需要注意的是,并不是所有的流类型都能够支持查找,例如,网络流没有当前位置的统一概念,因此一般不支持查找。说明:Stream类提供有多种操作流的方法,其中Read和Write方法是Stream类及其派生类都提供的实现,可支持在字节级别上对数据进行读写。实际的程序开发中,仅支持字节级别的数据处理会给开发人员带来不便。,4.2 数据流,提供字符串或二进制方式读取或写入流。优点:方法更灵活部分方法可解决TCP消息通信无边界问题,4.2.1 FileStream类,FileStream类继承于Stream类,一个FileStream类的实例实际上代表一个磁盘文件,使用FileStream类可以对文
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 套接字与数据流 套接 数据流 PPT 课件

链接地址:https://www.31ppt.com/p-5490837.html