第03章 套接字与数据流(1).ppt

上传人:s****8 文档编号:68499498 上传时间:2022-12-28 格式:PPT 页数:37 大小:469KB
返回 下载 相关 举报
第03章 套接字与数据流(1).ppt_第1页
第1页 / 共37页
第03章 套接字与数据流(1).ppt_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《第03章 套接字与数据流(1).ppt》由会员分享,可在线阅读,更多相关《第03章 套接字与数据流(1).ppt(37页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、1 1第第3章章 套接字与数据流套接字与数据流3.0 IP地址地址转换与域名解析与域名解析 3.0.1 IP地址与端口地址与端口 3.0.2 IP地址地址转换相关相关类 3.0.3 域名解析域名解析3.1 套接字套接字3.1.1 面向面向连接的套接字接的套接字 3.1.2 无无连接的套接字接的套接字3.2 数据流数据流3.2.1 文件流文件流3.2.2 内存流内存流3.2.3 网网络流流3.2.4 StreamWriter与与StreamReader类3.2.5 BinaryReader与与BinaryWriter类2 2本章教学目的本章教学目的学学习套接字套接字编程的基本方法,以及数据流相关

2、程的基本方法,以及数据流相关类的用法。的用法。本章教学要求本章教学要求(1)掌握套接字的概念及)掌握套接字的概念及Socket类用法;用法;(2)掌握面向)掌握面向连接套接字接套接字编程、无程、无连接套接字接套接字编程基本步程基本步骤(3)掌握)掌握FileStream、MemoryStream、NetworkStream类的用法;的用法;(4)掌握)掌握StreamReader、StreamWriter、BinaryReader、BinaryWriter类的基本用法。的基本用法。本章重点本章重点3 33.0 IP地址转换与域名解析地址转换与域名解析3.0.1 IP地址与端口地址与端口 IP地

3、址、端口号的基本概念知地址、端口号的基本概念知识3.0.2 IP地址地址转换转换相关相关类类 IPAddress、IPEndPoint、IPHostEntry类类的用法的用法3.0.3 域名解析域名解析 Dns类进行域名解析的方法行域名解析的方法4 43.0.1 IP地址与端口地址与端口TCP/IP(传输控制控制协议/网网际协议)不是)不是一个一个协议,而是,而是一一组协议的的总称,包括称,包括IP、TCP、UDP、ICMP、ARP等。它等。它规范范了网了网络上的所有通信上的所有通信设备,尤其是一个主机与另一个主机之,尤其是一个主机与另一个主机之间的数据交的数据交换格式以及格式以及传送方式。送

4、方式。5 53.0.1 IP地址与端口地址与端口(续)(续)IP地址:地址:是是给每个每个连接在因特网上的主机(或路由器)分配一个在接在因特网上的主机(或路由器)分配一个在全世界范全世界范围内惟一的内惟一的标识符。一个符。一个IP地址主要由两部分地址主要由两部分组成:网成:网络地址和主机地址。地址和主机地址。网网络地址由因特网地址由因特网权力机构分配,主机地址由各个网力机构分配,主机地址由各个网络的管理的管理员统一分配。一分配。IP地址地址编制方案制方案有两种:有两种:IPV4和和IPV6IPV4:二:二进制表示共制表示共32位(位(4个字个字节)IPV6:二:二进制表示共制表示共128位(位

5、(16个字个字节)在在IPV4编制方案中,一般使用点分十制方案中,一般使用点分十进制表示法表示制表示法表示IP地址。例如地址。例如:192.168.3.16 63.0.1 IP地址与端口地址与端口(续)(续)子网掩子网掩码:子网掩子网掩码用于屏蔽用于屏蔽IP地址的一部分以区地址的一部分以区别网网络标识和主机和主机标识。把所有的网。把所有的网络位(二位(二进制)用制)用1来来标识,主机位用主机位用0来来标识。例如例如:对于于IP地址地址192.168.0.X,可以将子网掩,可以将子网掩码设置置为255.255.255.0,对于于IP地址地址192.168.0.X,其网其网络标示部分示部分为192

6、.168.0;主机;主机标示示为:X7 73.0.1 IP地址与端口地址与端口(续)(续)端口:端口:IP地址地址仅仅能能够具体具体标识到某台主机,而端口到某台主机,而端口则表表示与示与计算机上的哪个算机上的哪个进程通信。程通信。根据根据IP地址找到是与哪台机器通信,根据端口号找到是与地址找到是与哪台机器通信,根据端口号找到是与该机器的哪个机器的哪个进程通信。程通信。(一个一个进程可能会使用多个端口程可能会使用多个端口)端口地址的范端口地址的范围是十是十进制的制的0655358 83.0.2 IP地址转换相关类地址转换相关类IPAddress类(System.Net命名空命名空间下下):常用常

7、用IPAddress的的Parse方法方法将将IP地址字符串地址字符串转换为IPAddress的的实例。例。例如:例如:IPAddress ip=IPAddress.Parse(“192.168.1.1”);构造函数构造函数有:有:(1)public IPAddress(byte address)byte iparray=new byte 143,24,20,36;IPAddress localIP=new IPAddress(iparray);(2)public IPAddress(long newAddress)long ip=0 x2414188f;IPAddress localIP=n

8、ew IPAddress(ip);9 93.0.2 IP地址转换相关类地址转换相关类(续)(续)IPAddress类常用属性常用属性1.Any 提供一个提供一个IPv4地址,指示服地址,指示服务器器应侦听所有网听所有网络接口上接口上的客的客户端活端活动。(等效于。(等效于0.0.0.0)2.Broadcast 提供提供IPv4广播地址(等效于广播地址(等效于255.255.255.255)3.Loopback 表示表示IPv4回送地址(等效于回送地址(等效于127.0.0.1)4.None 表示表示Socket不不应侦听客听客户端活端活动(不使用任何网(不使用任何网络接口接口)。)。5.IPv

9、6Any 提供可用的提供可用的IPv6地址地址6.IPv6Loopback 表示表示IPv6回送地址回送地址7.IPv6None 提供不使用任何网提供不使用任何网络接口。接口。10103.0.2 IP地址转换相关类地址转换相关类(续)(续)IPEndPoint类包含了包含了连接到主机上的服接到主机上的服务所需的所需的IP地址和地址和端口信息。端口信息。IPEndPoint类常用的构造函数常用的构造函数为:public IPEndPoint(IPAddress,int);其中第一个参数指定其中第一个参数指定IP地址,第二个参数指定端口号。地址,第二个参数指定端口号。11113.0.2 IP地址转

10、换相关类地址转换相关类(续)(续)IPHostEntry类的的对象中包含了与主机相关的信息。常用属性:象中包含了与主机相关的信息。常用属性:(1)AddressList属性属性:获取或取或设置与主机关置与主机关联的的IP地址列表,是一个地址列表,是一个IPAddress类型型的数的数组,包含了指定主机的所有,包含了指定主机的所有IP地址;地址;(2)HostName属性:包含了服属性:包含了服务器的主机名。器的主机名。(3)Aliases属性包含了与主机关属性包含了与主机关联的的别名列表。名列表。在在Dns类中,有一个中,有一个专门获取取IPHostEntry对象的方法。象的方法。例如:例如:

11、IPAddress ips=Dns.GetHostEntry(“http:/).AddressList;12123.0.3 域名解析域名解析DNS(Domain Name System,域名系,域名系统)提供了一系列静)提供了一系列静态的方法,用于的方法,用于获取提取提供本地或供本地或远程域名等功能程域名等功能,常用方法有:常用方法有:(1)GetHostAddresses方法方法 获取指定主机的取指定主机的IP地址,返回一个地址,返回一个IPAddress类型的数型的数组。格。格式式为:public static IPAddress GetHostAddresses(string hostN

12、ameOrAddress);例如:例如:IPAddress ips=Dns.GetHostAddresses();注意:如果注意:如果hostNameOrAddress是是IP地址,地址,则不不查询DNS服服务器,直接返回此地址。器,直接返回此地址。13133.0.3 域名解析域名解析(续)(续)(2)GetHostEntry方法方法 在在DNS服服务器中器中查询与某个主机名或与某个主机名或IP地址关地址关联的的IP地址。地址。当参数当参数为空字符串空字符串时,此方法返回本地主机的,此方法返回本地主机的IPv4地址和主机名。地址和主机名。例如:例如:IPHostEntry host=Dns.G

13、etHostEntry();listBox1.Items.AddRange(host.AddressList);/本机所有本机所有IPv4地址地址listBox1.Items.Add(host.HostName);/本机主机名本机主机名(3)GetHostName方法方法获取本机主机名。取本机主机名。例如:例如:string hostname=Dns.GetHostName();14143.1.3 域名解析域名解析(续)(续)【例例3-1】演示演示IPAddress类、Dns类、IPHostEntry类和和IPEndPoint类的使用方法,的使用方法,设计界面如界面如图2-1所示。所示。单击“

14、显示本机示本机IP信息信息”按按钮可以可以显示主机名及相关的示主机名及相关的IP地址;地址;单击“显示服示服务器信息器信息”按按钮可可显示中央示中央电视台服台服务器器的的IP地址信息。地址信息。15153.1 套接字套接字一个一个连接由它的两个端点接由它的两个端点标识,这样的端点称的端点称为套接字。套接字。16163.1 套接字(续套接字(续)套接字是支持套接字是支持TCP/IP协议的网的网络通信的基本操作通信的基本操作单元。可元。可以将套接字看作以将套接字看作不同主机不同主机间的的进程程进行双向通信的端点行双向通信的端点。上上图连接接1的一的一对套接字套接字为:(192.168.2.23,5

15、000)和()和(192.168.2.122,8888)上上图连接接2的一的一对套接字套接字为:(192.168.2.23,5001)和()和(192.168.2.122,8888)对于于UDP协议尽管两个尽管两个进程之程之间没有建立没有建立连接,但是也同接,但是也同样存在存在发送端点,和接收端点,也同送端点,和接收端点,也同样使用套接字的概念。使用套接字的概念。17173.1 套接字(续套接字(续)套接字的套接字的类型有:型有:1.流式流式套接字:提供了面向套接字:提供了面向连接的、可靠的、数据无接的、可靠的、数据无错并且并且无重复的数据无重复的数据发送服送服务,而且接收数据的,而且接收数据

16、的顺序和序和发送数据送数据的的顺序是相同的。序是相同的。2.数据数据报套接字:提供了面向无套接字:提供了面向无连接的服接的服务,它以独立的数它以独立的数据包形式据包形式发送数据送数据(数据包数据包长度不能大于度不能大于32KB),不提供,不提供正确性正确性检查,也不保,也不保证各数据包的各数据包的发送送顺序和接收序和接收顺序相序相同同,因此,可能出,因此,可能出现数据的重数据的重发、丢失等失等现象。象。3.原始原始套接字:用于直接套接字:用于直接访问协议的的较低低层。常用于。常用于检验新新的的协议实现或或访问现有服有服务中配置的新中配置的新设备,一般不提倡,一般不提倡直接使用原始套接字。直接使

17、用原始套接字。18183.1 套接字(续套接字(续)Socket类包含在包含在System.Net.Sockets命名空命名空间中。中。一个一个Socket实例包含了一个本地或者一个例包含了一个本地或者一个远程端点的套接程端点的套接字信息。字信息。使用使用Socket类编程,由于很多程,由于很多细节都需要自己考都需要自己考虑,相,相对来来说复复杂一些,易出一些,易出错。一般。一般对套接字套接字编程比程比较熟悉的人熟悉的人,或者使用非,或者使用非标准准协议(自定(自定义的新的新协议)进行行编程的程的时候,才使用候,才使用Socket类。Socket类的构造函数的构造函数为:public Sock

18、et(AddressFamily addressFamily,/网网络类型型 SocketType socketType,/套接字套接字类型型 ProtocolType protocolType);/使用的使用的协议 19193.1 套接字(续套接字(续)参数含参数含义:(1)addressFamily addressFamily表示网表示网络类型,型,该参数使用参数使用AddressFamily枚枚举指定指定Socket使用的使用的寻址方案址方案例如例如AddressFamily.InterNetwork表示表示IP版本版本4的地址。的地址。20203.1 套接字(续套接字(续)21213.

19、1 套接字(续套接字(续)(2)socketTypesocketTyp指定指定Socket的的类型,型,该参数使用参数使用SocketType枚枚举指定使用哪种套接字。例如指定使用哪种套接字。例如:SocketType.Stream表明表明连接是基于流套接字的接是基于流套接字的SocketType.Dgram表示表示连接是基于数据接是基于数据报套接字套接字SocketType.Raw表示表示连接基于原始套接字;接基于原始套接字;22223.1 套接字(续套接字(续)(3)protocolTypeprotocolType指定指定Socket使用的使用的协议,该参数使用参数使用ProtocolTy

20、pe枚枚举指定使用哪种指定使用哪种协议。例如。例如:uProtocolType.Tcp表明表明连接接协议是是TCPuProtocolType.Udp表明表明连接接协议是是UDP23233.1 套接字(续套接字(续)Socket构造函数的三个参数中,对于网络上的构造函数的三个参数中,对于网络上的IP通信来说,通信来说,AddressFamily总是使用总是使用AddressFamily.InterNetwork枚举值。而枚举值。而SocketType参数则与参数则与ProtocolType参数配合使用,不允许其他的匹配参数配合使用,不允许其他的匹配形式,也不允许混淆匹配。下表列出了可用于形式,也

21、不允许混淆匹配。下表列出了可用于IP通信的组合。通信的组合。SocketTypeProtocolType说说明明DgramUdp无无连连接通信接通信StreamTcp面向面向连连接的通信接的通信RawIcmpInternet控制控制报报文文协议协议RawRaw简单简单IP包通信包通信24243.1.1 面向连接的套接字面向连接的套接字IP连接接领域有两种通信域有两种通信类型:型:u面向面向连接的(接的(connection-oriented)u无无连接的(接的(connectionless)。)。根据根据连接启接启动的方式以及本地套接字要的方式以及本地套接字要连接的目接的目标,套接,套接字之字

22、之间的的连接接过程可以分程可以分为三个步三个步骤:u服服务器器监听听u客客户端端请求求u连接确接确认25253.1.1 面向连接的套接字面向连接的套接字服服务器器监听:听:是指服是指服务器套接字并不定位具体的客器套接字并不定位具体的客户端套端套接字,而是接字,而是处于等待于等待连接的状接的状态,实时监控网控网络状状态。客客户端端请求:求:是指由客是指由客户端的套接字提出端的套接字提出连接接请求,要求,要连接的目接的目标是服是服务器的套接字。器的套接字。为此,客此,客户端的套接字必端的套接字必须首先描述它要首先描述它要连接的服接的服务器的套接字,指出服器的套接字,指出服务器套接字器套接字的地址和

23、端口号,然后再向服的地址和端口号,然后再向服务器套接字提出器套接字提出连接接请求。求。连接确接确认:是指当服是指当服务器套接字器套接字监听到客听到客户端套接字的端套接字的连接接请求求时,它就响,它就响应客客户端套接字的端套接字的请求,把服求,把服务器套接器套接字的信息字的信息发给客客户端,一旦客端,一旦客户端确端确认了此信息,了此信息,连接即接即可建立。而服可建立。而服务器套接字器套接字继续监听其他客听其他客户端套接字的端套接字的连接接请求。求。26263.1.1 面向连接的套接字面向连接的套接字Socket()Bind()Listen()Accept()Receive()Send()Clos

24、e()Socket()Connect()Send()Receive()Close()服务器端 客户端面向连接的套接字编程27273.1.1 面向连接的套接字面向连接的套接字同步同步TCP编写服写服务器端程序的一般步器端程序的一般步骤为:1)创建一个包含采用的网建一个包含采用的网络类型、数据型、数据传输类型和型和协议类型型的本地套接字的本地套接字对象,并将其与服象,并将其与服务器的器的IP地址和端口号地址和端口号绑定。定。这个个过程可以通程可以通过Socket类。2)在指定的端口在指定的端口进行行监听,以便接受客听,以便接受客户端端连接接请求。求。3)一旦接受了客一旦接受了客户端的端的连接接请求

25、,就根据客求,就根据客户端端发送的送的连接接信息信息创建与建与该客客户端端对应的的Socket对象。象。4)根据根据创建的建的Socket对象,分象,分别与每个与每个连接的客接的客户进行数据行数据传输。5)根据根据传送信息情况确定是否关送信息情况确定是否关闭与与对方的方的连接。接。28283.1.1 面向连接的套接字面向连接的套接字 使用同步使用同步TCP编写客写客户端程序的一般步端程序的一般步骤为:1)创建一个包含建一个包含传输过程中采用的网程中采用的网络类型、数据型、数据传输类型和型和协议类型的型的Socket对象。象。2)与与远程服程服务器建立器建立连接。接。3)与服与服务器器进行数据行

26、数据传输。4)完成工作后,向服完成工作后,向服务器器发送关送关闭信息,并关信息,并关闭与服与服务器的器的连接。接。29293.1.1 面向连接的套接字(续)面向连接的套接字(续)1.建立建立连接(服接(服务器)器)IPHostEntry local=Dns.GetHostByName(Dns.GetHostName();IPEndPoint iep=new IPEndPoint(local.AddressList0,1180);Socket localSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolT

27、ype.Tcp);localSocket.Bind(iep);locatSocket.Listen(10);Socket clientSocket=localSocket.Accept();30303.1.1 面向连接的套接字(续)面向连接的套接字(续)1.建立建立连接(客接(客户端)端)IPAddress remoteHost=IPAddress.Parse(192.168.0.1);PEndPoint iep=new IPEndPoint(remoteHost,1180);Socket localSocket=new Socket(AddressFamily.InterNetwork,So

28、cketType.Stream,ProtocolType.Tcp);localSocket.Connect(iep);31313.1.1 面向连接的套接字(续)面向连接的套接字(续)2.发送、接收信息(服送、接收信息(服务器)器)Socket clientSocket=localSocket.Accept();/建立建立连接后,利用接后,利用Send方法向客方法向客户端端发送信息送信息clientSocket.Send(Encoding.ASCII.GetBytes(server send Hello);/接收客接收客户端信息端信息byte myresult=new Byte1023;int

29、receiveNum=clientSocket.Receive(myresult);Console.WriteLine(接收客接收客户端消息端消息:+Encoding.ASCII.GetString(myresult);32323.1.1 面向连接的套接字(续)面向连接的套接字(续)2.发送、接收信息(客送、接收信息(客户端)端)/建立建立连接成功后,向服接成功后,向服务器器发送信息送信息string sendMessage=client send Message Hello+DateTime.Now;localSocket.Send(Encoding.ASCII.GetBytes(sendM

30、essage);Console.WriteLine(向服向服务器器发送消息送消息:,+sendMessage);/接收服接收服务器信息器信息byte result=new Byte1023;localSocket.Receive(result);Console.WriteLine(接收服接收服务器消息器消息:,+Encoding.ASCII.GetString(result);33333.1.1 面向连接的套接字(续)面向连接的套接字(续)3.关关闭连接接通信完成后,必通信完成后,必须先用先用Shutdown方法停止会方法停止会话,然后关,然后关闭Socket实例例。例如:例如:sock.Sh

31、utdown(SocketShutdown.Both);sock.Close();34343.1.1 面向连接的套接字(续)面向连接的套接字(续)【例例3-2】编写一个控制台程序,利用写一个控制台程序,利用Socket实现面向面向连接的客接的客户端端和和 服服务器端的消息通信,其中服器端的消息通信,其中服务器可以与多个客器可以与多个客户端通信,端通信,并随并随时接收客接收客户端端发送的消息。送的消息。35353.1.2 无连接的套接字UDP使用无使用无连接的套接字,无接的套接字,无连接的套接字不需要在网接的套接字不需要在网络设备之之间发送送连接信息。接信息。注意注意:必必须使用使用Bind方法

32、将套接字方法将套接字绑定到一个本地地址和端口之定到一个本地地址和端口之后才能使用后才能使用ReceiveFrom方法接收数据,如果只方法接收数据,如果只发送而不送而不接收,接收,则不需要使用不需要使用Bind方法。方法。36363.1.2 无连接的套接字Socket()Bind()ReceiveFrom()SendTo()Close()Socket()Bind()SendTo()ReceiveFrom()Close()设备1设备2无连接套接字编程37373.1.2 无连接的套接字【例例3-3】编写一个控制台程序,利用写一个控制台程序,利用Socket实现面向无面向无连接的客接的客户端和端和 服服务器端的消息通信,其中服器端的消息通信,其中服务器可以与多个客器可以与多个客户端通信,端通信,并随并随时接收客接收客户端端发送的消息。送的消息。

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

当前位置:首页 > 生活休闲 > 生活常识

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com