




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十四章网络通信辽宁机电职业技术学院信息工程系软件教研室迟勇回顾补充代码完成:publicclassDigitalClockextendsAppletimplements_____________
{ Threadrunner;//定义线程类实例 publicvoidstart() { if(runner==null) { runner=newThread(this);//初始化线程类实例,并指明target对象this runner.
();//线程就绪,获得CPU运行调度后,将开始运行run()方法
} } publicvoid
(){……}//run()方法定义在实现Runnable接口的类中}Runnablestartrun本章学习任务使用URL类获取网络信息获取Internet和本地主机地址使用ServerSocket类和Socket类实现简单聊天室使用DatagramSocket类和DatagramPacket类实现客户端与服务器端通信本章技能目标了解网络通信的基本协议了解URL类的作用使用Socket类和ServerSocket类编写通信程序使用DatagramSocket类和DatagramPacket类编写通信程序预习检查(1)--预习新单词单词释义单词释义LANWANTCPUDPURLSocketDatagramprotocol预习检查(2)TCP与UDP协议区别?使用Socket类和ServerSocket类编写通信程序,创建对象的语法格式是?网络通信-内容目录网络基本概念URL使用Socket类和ServerSocket类编写通信程序DatagramSocket类和DatagramPacket类局域网(LAN)与广域网(WAN)网络大致可分为局域网(LocalAreaNetWork)和广域网(WideAreaNetWork)两种。局域网通常是指通过网卡和网线将一个网段内的所有计算机连接在一起的网络,由于几乎不计网络带宽或流量,因此它具有访问简便,速度快捷的特点。广域网现在特指Internet,就是世界上的个人计算机或局部网络通过电话线或专线连接的世界性网络。
域名与IP地址
1.IP地址
IP地址即InternetProtocal地址,它用于在网络上唯一标识每一台计算机。就像我们的家庭电话都有一个唯一号码一样,IP地址由4组8位的二进制数(共32位)组成,例如:11000000101010000000000000000001
因为32位二进数不利于书写和记忆,因此采用四组十进制数表示,例如上面的二进制数字可转换为:
域名与IP地址
2.域名由于IP地址仍不利于记忆,因此实际应用中经常使用域名来代替IP地址标识网络主机在网络上的位置。例如:,等,当用户通过域名访问网络站点时,域名服务器将域名解析成IP地址,再通过IP地址访问站点主机。域名也是唯一的,需要在网络域名提供商那里注册得到。原则上域名与IP地址是一一对应的关系,但通过对服务器的特殊设置也可以实现多个域名对应一个IP地址,即在一台服务器上设置多个站点。14.1.3网络协议在Internet上的各种计算机系统平台之间需要相互通信,但是各个系统的内码和所能识别的数据规则不同,就像一位中国人和一位法国人在一起交谈时需要一位了解汉语和法语的翻译一样,各个系统之间相互通信需要共同遵守一定的规则,这些规则就是协议。协议是网络的通用语言,它是网络中传递、管理信息的一些规范。常见的协议有:TCP/IP协议、IPX/SPX协议、NetBIOS、HTTP协议等等。TCP和UDP本章示例中涉及的协议主要为TCP和UDP:TCP(传输控制协议:TransportControlProtocol):是面向连接的协议,通过校验保证传输数据包的可靠性,发送方和接收方的socket(套接字)必须建立连接,然后才可以通信;Java中的URL,Socket,ServerSocket等类使用TCP协议通信。UDP(用户数据报协议:UserDatagramProtocol):是非面向连接的协议,传输数据时不附加可靠性验证,每个数据报都包括完整的源地址和目的地址,数据报在网络上可能以任何路径传往目的地;DatagramPacket,DatagramSocket等类使用UDP协议通信。选择协议的时机既然TCP和UDP都可以进行网络通信,那么实际应用中究竟如何选择呢?它们的选择时机如下:由于UDP的数据报中包含了完整的地址,因此无需发送方和接收方进行连接;而TCP是面向连接的协议,在scoket之间传输数据时必须进行连接,另外可靠性校验也会占用一定的网络带宽,因此需要较多处理时间和系统资源;UDP的数据报大小是有限制的,每个数据报理论上不大于64KB,但数据区往往只有1472字节,因此往往需要大量传送数据报,而UDP又是一个非面向连接,不可靠的协议,因此使用它时网络安全性要求要比较高,如局域网C/S构架的应用程序;TCP适用于那种需要可靠传送且长度不定的数据的情况。常见的网络服务与其端口号常见的网络服务有http、ftp、pop、smtp、telnet等(它们的功能请参看表14-1),为了在一台服务器上安装多个服务,我们引入了端口(port)的概念。如果把IP地址比作一间房子,端口就是出入这间房子的门。端口号的范围从0到65535。按端口号号码范围来划分,0~1023端口号为系统保留,固定分配给一些服务,自行设定端口号时要选取大于5000的端口号。按协议类型划分可以分为TCP、UDP、IP和ICMP(Internet控制消息协议)等类型的端口。常见的网络服务与其端口号TCP类型端口:即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。如FTP服务的21端口,HTTP服务的80端口等等。UDP类型端口:即用户数据报协议端口,无需在客户端和服务器之间建立连接,可靠性得不到保障。常见的有DNS服务的53端口,QQ使用的8000和4000端口等等。每个服务都占用一个端口,默认时每个服务有自己特定的端口号,除非特意改变它们常用网络服务及对应的端口号表14-1常用网络服务及端口号网络服务对应端口号http,超文本传输服务80ftp,文件传输服务21telnet,登录远程服务器23smtp,简单邮件传输服务25pop,将邮件存储在远程邮件服务器上109常用网络服务及对应的端口号另外,一些安装到系统平台的Web服务器软件和数据库管理系统软件在启动时也会占用一些固定端口,如MSSQLServer默认占用1433端口,ApacheTomcat默认占用8080端口,BEAWeblogic默认占用7001端口等。ApacheTomcat和BEAWeblogic都是现今比较流行的JSP引擎,主要用于基于JSP技术开发的站点,JSP(JavaServerPages)应是读者在后继的学习中要接触到的知识。SQLServer是微软公司开发的操作简便但功能强大的数据库管理系统,在本书的最后一章中我们会学习到关于它基本的访问和使用网络通信-内容目录网络基本概念URL使用Socket类和ServerSocket类编写通信程序DatagramSocket类和DatagramPacket类URL类
URL(UniformResourceLocator)是统一资源定位器的简称,它可以用来标识网络资源的地址。URL的组成:
一个URL包括两个部分:协议名和资源名,中间用冒号隔开,例如:协议名:资源名其中协议名由前面14.2.1节的网络服务名指定。资源名即资源的完整地址,包括主机名、端口号、目录或文件名等内容。下面是几个URL地址示例:
/tom/index.html#chapter1:21/pic
Java中的URL类包中的URL类实现了Java对URL的应用,它的常用构造方法如下:1.URL(Stringspec);根据字符串表示形式创建URL对象。例如:URLcsdn_url=newURL(“:21/pic”);2.URL(Stringprotocol,Stringhost,intport,Stringfile);根据指定的协议、主机名、端口号和文件名创建URL对象。例如:URLcsdn_url=newURL(“ftp”,“”,21,“pic”);
Java中的URL类3.URL(URLcontext,Stringspec);通过在指定的上下文中对给定的字符串进行解析创建URL对象。例如:URLcsdn_url=newURL(“:21/pic”); URLindex_url=newURL(csdn_url,“index.html”);注意:构造URL对象时,如果指定了错误的协议,会抛出MalformedURLException异常。
URL类常用方法URL类的方法说明int
getDefaultPort()获得与此URL关联协议的默认端口号StringgetFile()获得此URL的文件名StringgetHost()获得此URL的主机名StringgetPath()获得此URL的路径部分int
getPort()获得此URL的端口号StringgetProtocol()获得此URL的协议名称表14-2URL类常用方法例14-1:获取URL类属性信息import.*;publicclassGetURLInfo{publicstaticvoidmain(String[]args)throwsMalformedURLException{ URLurl=newURL("/"); URLpageUrl=newURL(url,"download/index.jsp"); System.out.println("协议关联端口:"+pageUrl.getDefaultPort()); System.out.println("站点文件名:"+pageUrl.getFile()); System.out.println("站点主机:"+pageUrl.getHost()); System.out.println("使用协议:"+pageUrl.getProtocol());}}14.2.3使用InetAddress类获取主机地址网络上的主机地址有两种表示形式:域名方式:IP地址方式:34使用包中的InetAddress类,可以获取这两种地址。
1.获取Internet上主机地址使用InetAddress类的getByNames(Strings)静态方法可以根据域名字符串获得InetAddress对象,该对象包含有该参数的“域名形式”和“IP地址形式”的值对。例如可以输入域名“”得到值对“/32”。另外,InetAddress类还有两个方法用以从InetAddress对象的值对中获取“域名形式”或“IP地址形式”。publicStringgetHostName();获取InetAddress对象的域名形式publicStringgetHostAddress();获取InetAddress对象的IP地址形式2.获取本地机地址:使用InetAddress类的getLocalHost()静态方法可以获得本地机InetAddress对象,该对象包含有本机的域名和IP地址。import.*;publicclassGetAddress{publicstaticvoidmain(String[]args){ try{ InetAddressaddress01=InetAddress.getByName(""); System.out.println(address01.toString());//输出Internet站点的域名/IP地址
System.out.println(address01.getHostName());//输出域名
System.out.println(address01.getHostAddress());//输出IP地址例14-2:获取Internet和本地主机地址InetAddressaddress02=InetAddress.getLocalHost();//输出本地机域名/IP地址 System.out.println(address02.toString()); System.out.println(address02.getHostName()); System.out.println(address02.getHostAddress()); } catch(UnknownHostExceptionex){ }}}网络通信-内容目录网络基本概念URL使用Socket类和ServerSocket类编写通信程序DatagramSocket类和DatagramPacket类Java的网络API类库是典型的基于TCP/IP通讯的网络类库,程序之间依靠Socket进行通讯。我们可以把Socket看成是在两个程序进行通讯连接中的一个端点(比如电源的一个插座),一个程序先将一段信息写入Socket中,然后该Socket将这段信息发送给另外一个Socket,使这段信息能传送到那个程序中。“套接字”(Socket)也是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”。线缆的每一端都插入一个“套接字”或称“插座”里。当两台机器都建立了Socket,并连接完毕就可以通信了。什么是socket?两个基于数据流的套接字类从套接字得到的结果是一个InputStream以及OutputStream(若使用恰当的转换器,则分别是Reader和Writer),以便将连接作为一个IO流对象对待。有两个基于数据流的套接字类:ServerSocket,服务器用它“侦听”进入的连接;Socket,客户用它初始一次连接。运行过程
注意:“ServerSocket”这个命名有不恰当的地方,因为它的作用不是真的成为一个Socket,而是在其它Socket同它连接的时候产生一个Socket对象。所以,程序的运行过程应该是这样的:1)创建服务器端ServerSocket对象和客户端Socket对象,建立连接;2)建立信息,以流的形式连接到Socket;3)读写操作;4)关闭Socket。创建ScoketSocket类的常用构造方法如下:Socket(InetAddressaddress,intport);创建一个流套接字并将其连接到指定IP地址的指定端口号。ServerSocket类的常用构造方法如下:ServerSocket(intport);创建绑定到特定端口的服务器套接字。例如:创建客户端的Socket对象,并设定端口号为2000,格式为:SocketclientSocket=newSocket("",2000);创建服务器端的ServerSocket对象,格式为:ServerSocketserverSocket=newServerSocket(2000);14.3.3创建输入/输出流
ServerSocket类与Socket类都提供了getInputStream()和getOutputStream()方法来得到对应的输入/输出流,这两个方法分别返回InputStream和OutputStream类的对象。为了提高输入/输出效率,可以再套接过滤流,如DataInputStream和DataOutputStream类用于处理数字,InputStreamReader和OutputStreamWriter,PrintWriter等类用于处理文本。例14-3:简单聊天室示例(主要代码)例14-3:服务器端程序TalkServer类(TalkServer.java程序代码)/*建立服务器端ServerSocket对象*/serverSocket=newServerSocket(2000);System.out.println("等待客户端的连接...");clientSocket=serverSocket.accept();//接收来自客户端的Socketbr=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));System.out.println("来自客户端的信息是:"+br.readLine());TalkServer.java程序代码
(主要代码)/*建立接收本地服务器控制台的输入信息的输入流对象server_br*/BufferedReaderserver_br=newBufferedReader( newInputStreamReader(System.in));//接收来自客户端信息Stringserver_info=server_br.readLine();/*建立向客户端写出信息的输出流对象pw*/pw=newPrintWriter(newOutputStreamWriter(clientSocket.getOutputStream));//接收本地服务器控制台的输入信息while(!server_info.equals("bye")){ pw.println(server_info);//把信息传给客户端客户端程序Talk类(主要代码)SocketclientSocket=newSocket("",2000);//建立客户端的Socket/*建立接收服务器端信息的输入流对象br*/BufferedReaderbr=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));/*建立向服务器端写出信息的输出流对象pw*/PrintWriterpw=newPrintWriter(newOutputStreamWriter( clientSocket.getOutputStream));/*建立接收本地客户端控制台的输入信息的输入流对象client_br*/BufferedReaderclient_br=newBufferedReader( newInputStreamReader(System.in));
Talk.java程序代码(主要代码)System.out.println(“聊天客户端已经启动...”);Stringclient_info=client_br.readLine();//本地客户端控制台的输入信息System.out.println(“您输出的信息是:”+client_info);while(!client_info.equals("bye")){//客户端控制台输入"bye"时程序结束 pw.println(client_info);//把信息传给服务器端…运行步骤2)3)1)编译好两个源程序,先启动TalkServer类,再启动Talk类;在客户端程序控制台窗口中输入“你好,管理员”,在服务器端窗口中会看到此信息;当在两个窗口中输入“bye”时,程序退出。【运行步骤】运行结果网络通信-内容目录网络基本概念URL使用Socket类和ServerSocket类编写通信程序DatagramSocket类和DatagramPacket类14.4创建、接收与发送数据报需要从多个路径收集多种数据,且对可靠性要求并不严格,这时就可以考虑使用基于UDP协议的通信方式。另外,UDP也可以实现组播方式通信。包提供了DatagramSocket类和DatagramPacket类用来支持数据报通信,其中DatagramPacket类用于建立数据报包,DatagramSocket类用于在程序之间建立数据报的通信连接。在数据报通信时,客户端与服务器端都要先建立DatagramSocket对象以进行连接,然后就可以接收或发送数据报包。DatagramSocket类常用构造方法DatagramSocket类常用构造方法:DatagramSocket(intport)
创建数据报套接字并将其绑定到本地主机上的指定端口。DatagramSocket(intport,InetAddressladdr)
创建数据报套接字,将其绑定到指定的本地地址。DatagramPacket类常用构造方法DatagramPacket类常用构造方法:(其中buf数组用以存放数据报数据)DatagramPacket(byte[]buf,intlength)
构造DatagramPacket,用来接收长度为length的数据包。DatagramPacket(byte[]buf,intoffset,intlength)构造DatagramPacket,用来接收长度为length的包,并指定缓冲区偏移量DatagramPacket(byte[]buf,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中考英语-构词法(讲练)(解析)
- 数字智慧方案食品安全追溯方案
- 2024年高速型数控铣床或数控仿形铣床投资申请报告代可行性研究报告
- 供电防护员练习试题(三)
- 职业资格-交通工程真题库-5
- 职业资格-房地产经纪综合能力真题库-10
- 明确方向2025年财务管理考试试题及答案
- 单招高频试题及答案
- 高考数学试题及答案
- 可行性研究报告含义
- 中国铁路青藏集团有限公司招聘普通高校真题2024
- 抗生素临床疗效评价-全面剖析
- 2025年角膜接触镜考试题及答案
- 西部计划面试试题及答案
- 中级宏观经济学知到课后答案智慧树章节测试答案2025年春浙江大学
- 江苏开放大学2025年春大学英语B【2】
- 2025年江苏省安全员-B证考试题库及答案
- 【数学】图形的轴对称 问题解决策略:转化课件+2024-2025学年北师大版数学七年级下册
- 铁路运输安全风险防范-洞察分析
- 三年级 语文 下册《火烧云》课件 (第1课时)
- 2025年临床医师定期考核必考复习题库及答案(1080题)
评论
0/150
提交评论