已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章套接字与数据流,3.0IP地址转换与域名解析3.0.1IP地址与端口3.0.2IP地址转换相关类3.0.3域名解析3.1套接字3.1.1面向连接的套接字3.1.2无连接的套接字3.2数据流3.2.1文件流3.2.2内存流3.2.3网络流3.2.4StreamWriter与StreamReader类3.2.5BinaryReader与BinaryWriter类,本章教学目的学习套接字编程的基本方法,以及数据流相关类的用法。本章教学要求(1)掌握套接字的概念及Socket类用法;(2)掌握面向连接套接字编程、无连接套接字编程基本步骤(3)掌握FileStream、MemoryStream、NetworkStream类的用法;(4)掌握StreamReader、StreamWriter、BinaryReader、BinaryWriter类的基本用法。,本章重点,3.0IP地址转换与域名解析,3.0.1IP地址与端口IP地址、端口号的基本概念知识3.0.2IP地址转换相关类IPAddress、IPEndPoint、IPHostEntry类的用法3.0.3域名解析Dns类进行域名解析的方法,3.0.1IP地址与端口,TCP/IP(传输控制协议/网际协议)不是一个协议,而是一组协议的总称,包括IP、TCP、UDP、ICMP、ARP等。它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据交换格式以及传送方式。,3.0.1IP地址与端口(续),IP地址:是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围内惟一的标识符。一个IP地址主要由两部分组成:网络地址和主机地址。网络地址由因特网权力机构分配,主机地址由各个网络的管理员统一分配。IP地址编制方案有两种:IPV4和IPV6IPV4:二进制表示共32位(4个字节)IPV6:二进制表示共128位(16个字节)在IPV4编制方案中,一般使用点分十进制表示法表示IP地址。例如:,3.0.1IP地址与端口(续),子网掩码:子网掩码用于屏蔽IP地址的一部分以区别网络标识和主机标识。把所有的网络位(二进制)用1来标识,主机位用0来标识。例如:对于IP地址192.168.0.X,可以将子网掩码设置为,对于IP地址192.168.0.X,其网络标示部分为192.168.0;主机标示为:X,3.0.1IP地址与端口(续),端口:IP地址仅仅能够具体标识到某台主机,而端口则表示与计算机上的哪个进程通信。根据IP地址找到是与哪台机器通信,根据端口号找到是与该机器的哪个进程通信。(一个进程可能会使用多个端口)端口地址的范围是十进制的065535,3.0.2IP地址转换相关类,IPAddress类(System.Net命名空间下):常用IPAddress的Parse方法将IP地址字符串转换为IPAddress的实例。例如:IPAddressip=IPAddress.Parse(“”);构造函数有:(1)publicIPAddress(byteaddress)byteiparray=newbyte143,24,20,36;IPAddresslocalIP=newIPAddress(iparray);(2)publicIPAddress(longnewAddress)longip=0 x2414188f;IPAddresslocalIP=newIPAddress(ip);,3.0.2IP地址转换相关类(续),IPAddress类常用属性Any提供一个IPv4地址,指示服务器应侦听所有网络接口上的客户端活动。(等效于)Broadcast提供IPv4广播地址(等效于55)Loopback表示IPv4回送地址(等效于)None表示Socket不应侦听客户端活动(不使用任何网络接口)。IPv6Any提供可用的IPv6地址IPv6Loopback表示IPv6回送地址IPv6None提供不使用任何网络接口。,3.0.2IP地址转换相关类(续),IPEndPoint类包含了连接到主机上的服务所需的IP地址和端口信息。IPEndPoint类常用的构造函数为:publicIPEndPoint(IPAddress,int);其中第一个参数指定IP地址,第二个参数指定端口号。,3.0.2IP地址转换相关类(续),IPHostEntry类的对象中包含了与主机相关的信息。常用属性:(1)AddressList属性:获取或设置与主机关联的IP地址列表,是一个IPAddress类型的数组,包含了指定主机的所有IP地址;(2)HostName属性:包含了服务器的主机名。(3)Aliases属性包含了与主机关联的别名列表。在Dns类中,有一个专门获取IPHostEntry对象的方法。例如:IPAddressips=Dns.GetHostEntry(“).AddressList;,3.0.3域名解析,DNS(DomainNameSystem,域名系统)提供了一系列静态的方法,用于获取提供本地或远程域名等功能,常用方法有:(1)GetHostAddresses方法获取指定主机的IP地址,返回一个IPAddress类型的数组。格式为:publicstaticIPAddressGetHostAddresses(stringhostNameOrAddress);例如:IPAddressips=Dns.GetHostAddresses();注意:如果hostNameOrAddress是IP地址,则不查询DNS服务器,直接返回此地址。,3.0.3域名解析(续),(2)GetHostEntry方法在DNS服务器中查询与某个主机名或IP地址关联的IP地址。当参数为空字符串时,此方法返回本地主机的IPv4地址和主机名。例如:IPHostEntryhost=Dns.GetHostEntry();listBox1.Items.AddRange(host.AddressList);/本机所有IPv4地址listBox1.Items.Add(host.HostName);/本机主机名(3)GetHostName方法获取本机主机名。例如:stringhostname=Dns.GetHostName();,3.1.3域名解析(续),【例3-1】演示IPAddress类、Dns类、IPHostEntry类和IPEndPoint类的使用方法,设计界面如图2-1所示。单击“显示本机IP信息”按钮可以显示主机名及相关的IP地址;单击“显示服务器信息”按钮可显示中央电视台服务器的IP地址信息。,3.1套接字,一个连接由它的两个端点标识,这样的端点称为套接字。,3.1套接字(续),套接字是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点。上图连接1的一对套接字为:(3,5000)和(22,8888)上图连接2的一对套接字为:(3,5001)和(22,8888)对于UDP协议尽管两个进程之间没有建立连接,但是也同样存在发送端点,和接收端点,也同样使用套接字的概念。,3.1套接字(续),套接字的类型有:流式套接字:提供了面向连接的、可靠的、数据无错并且无重复的数据发送服务,而且接收数据的顺序和发送数据的顺序是相同的。数据报套接字:提供了面向无连接的服务,它以独立的数据包形式发送数据(数据包长度不能大于32KB),不提供正确性检查,也不保证各数据包的发送顺序和接收顺序相同,因此,可能出现数据的重发、丢失等现象。原始套接字:用于直接访问协议的较低层。常用于检验新的协议实现或访问现有服务中配置的新设备,一般不提倡直接使用原始套接字。,3.1套接字(续),Socket类包含在System.Net.Sockets命名空间中。一个Socket实例包含了一个本地或者一个远程端点的套接字信息。使用Socket类编程,由于很多细节都需要自己考虑,相对来说复杂一些,易出错。一般对套接字编程比较熟悉的人,或者使用非标准协议(自定义的新协议)进行编程的时候,才使用Socket类。Socket类的构造函数为:publicSocket(AddressFamilyaddressFamily,/网络类型SocketTypesocketType,/套接字类型ProtocolTypeprotocolType);/使用的协议,3.1套接字(续),参数含义:(1)addressFamilyaddressFamily表示网络类型,该参数使用AddressFamily枚举指定Socket使用的寻址方案例如AddressFamily.InterNetwork表示IP版本4的地址。,3.1套接字(续),3.1套接字(续),(2)socketTypesocketTyp指定Socket的类型,该参数使用SocketType枚举指定使用哪种套接字。例如:SocketType.Stream表明连接是基于流套接字的SocketType.Dgram表示连接是基于数据报套接字SocketType.Raw表示连接基于原始套接字;,3.1套接字(续),(3)protocolTypeprotocolType指定Socket使用的协议,该参数使用ProtocolType枚举指定使用哪种协议。例如:ProtocolType.Tcp表明连接协议是TCPProtocolType.Udp表明连接协议是UDP,3.1套接字(续),Socket构造函数的三个参数中,对于网络上的IP通信来说,AddressFamily总是使用AddressFamily.InterNetwork枚举值。而SocketType参数则与ProtocolType参数配合使用,不允许其他的匹配形式,也不允许混淆匹配。下表列出了可用于IP通信的组合。,3.1.1面向连接的套接字,IP连接领域有两种通信类型:面向连接的(connection-oriented)无连接的(connectionless)。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听客户端请求连接确认,3.1.1面向连接的套接字,服务器监听:是指服务器套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器套接字的地址和端口号,然后再向服务器套接字提出连接请求。连接确认:是指当服务器套接字监听到客户端套接字的连接请求时,它就响应客户端套接字的请求,把服务器套接字的信息发给客户端,一旦客户端确认了此信息,连接即可建立。而服务器套接字继续监听其他客户端套接字的连接请求。,3.1.1面向连接的套接字,3.1.1面向连接的套接字,同步TCP编写服务器端程序的一般步骤为:1)创建一个包含采用的网络类型、数据传输类型和协议类型的本地套接字对象,并将其与服务器的IP地址和端口号绑定。这个过程可以通过Socket类。2)在指定的端口进行监听,以便接受客户端连接请求。3)一旦接受了客户端的连接请求,就根据客户端发送的连接信息创建与该客户端对应的Socket对象。4)根据创建的Socket对象,分别与每个连接的客户进行数据传输。5)根据传送信息情况确定是否关闭与对方的连接。,3.1.1面向连接的套接字,使用同步TCP编写客户端程序的一般步骤为:1)创建一个包含传输过程中采用的网络类型、数据传输类型和协议类型的Socket对象。2)与远程服务器建立连接。3)与服务器进行数据传输。4)完成工作后,向服务器发送关闭信息,并关闭与服务器的连接。,3.1.1面向连接的套接字(续),1.建立连接(服务器)IPHostEntrylocal=Dns.GetHostByName(Dns.GetHostName();IPEndPointiep=newIPEndPoint(local.AddressList0,1180);SocketlocalSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);localSocket.Bind(iep);locatSocket.Listen(10);SocketclientSocket=localSocket.Accept();,3.1.1面向连接的套接字(续),1.建立连接(客户端)IPAddressremoteHost=IPAddress.Parse();PEndPointiep=newIPEndPoint(remoteHost,1180);SocketlocalSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);localSocket.Connect(iep);,3.1.1面向连接的套接字(续),2.发送、接收信息(服务器)SocketclientSocket=localSocket.Accept();/建立连接后,利用Send方法向客户端发送信息clientSocket.Send(Encoding.ASCII.GetBytes(serversendHello);/接收客户端信息bytemyresult=newByte1023;intreceiveNum=clientSocket.Receive(myresult);Console.WriteLine(接收客户端消息:+Encoding.ASCII.GetString(myresult);,3.1.1面向连接的套接字(续),2.发送、接收信息(客户端)/建立连接成功后,向服务器发送信息stringsendMessage=clientsendMessageHello+DateTime.Now;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供应链物流优化与效率提升方案
- 交通物流业多式联运系统设计与优化方案
- 电子商务支付系统安全设计指南
- IT企业软件开发与项目管理方案
- 2026年课堂教学中的虚拟现实技术应用实践
- 2026年新护士护理病例讨论指南
- 2026年交通事故现场急救与伤员搬运
- 2026年糖尿病与心脑血管病讲座总结
- 2026年塔吊基础与工程桩协同设计
- 2026年医疗护理员职业道德与行为规范
- 搬运无损伤地面施工方案
- 城市供水管网工程施工方案
- DB36∕T 1926-2023 井冈蜜柚采后商品化处理技术规程
- 内瘘静脉狭窄个案护理
- 长郡集团2025年上期初三期末考试历史试卷
- 草原防火宣传课件
- (零诊)成都市2023级(2026届)高中毕业班摸底测试英语试卷(含答案)
- 2025年中海油招聘笔试参考题库附带答案详解
- 2025年全国新高考I卷高考全国一卷真题英语试卷(真题+答案)
- 实验室认证质量管理制度
- 合同转包协议书范本
评论
0/150
提交评论