java面向对象程序设计第十六章_第1页
java面向对象程序设计第十六章_第2页
java面向对象程序设计第十六章_第3页
java面向对象程序设计第十六章_第4页
java面向对象程序设计第十六章_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java高级

第十六章网络通信主要内容网络编程的基本概念,TCP/IP协议简介基于URL的Java网络编程基于Socket(套接字)的Java网络编程基于UDP的Socket编程TCP/IP协议简介网络基础知识计算机网络是相互连接的独立自主的计算机的集合,最简单的网络形式由两台计算机组成。网络上的计算机要互相通信,必须遵循一定的协议。目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议。网络编程的目的就是指直接或间接地通过网络协议与其它计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。两台计算机通过网络进行通信AB网络180协议协议端口端口网络地址网络中每台主机都必须有一个惟一的IP地址;IP地址是一个逻辑地址;因特网上的IP地址具有全球唯一性;32位,4个字节,常用点分十进制的格式表示,例如:6域名:网络地址的助记名,按照域名进行分级管理。例如,,。端口号(portnumber):网络通信时同一机器上的不同服务进程的标识。如:80,21,23,其中1~1024为系统保留的端口号。服务类型:网络的各种服务。例如http,telnet,ftp,smtp等。我们可以用以下的一幅图来描述这里我们所提到的几个概念:协议为进行网络中的数据交换(通信)而建立的规则、标准或约定。(=语义+语法+规则)不同层具有各自不同的协议。网络体系结构解决异质性问题采用的是分层方法——把复杂的网络互联问题划分为若干个较小的、单一的问题,在不同层上予以解决。就像我们在编程时把问题分解为很多小的模块来解决一样。ISO/OSI七层参考模型OSI(OpenSystemInterconnection)参考模型将网络的不同功能划分为7层。应用层表示层物理层会话层传输层网络层数据链路层处理网络应用数据表示主机间通信端到端的连接寻址和最短路径介质访问(接入)二进制传输ISO/OSI七层参考模型(CONT)通信实体的对等层之间不允许直接通信。各层之间是严格单向依赖。上层使用下层提供的服务—Serviceuser;下层向上层提供服务—Serviceprovider。“你好”“Hello”传真中国教师翻译秘书“Hallo”“Hello”传真德国教师翻译秘书对交谈内容的共识用英语对话使用传真通信P3P2P1物理通信线路OSI各层所使用的协议应用层:远程登录协议Telnet、文件传输协议FTP、超文本传输协议HTTP、域名服务DNS、简单邮件传输协议SMTP、邮局协议POP3等。传输层:传输控制协议TCP、用户数据报协议UDP。TCP:面向连接的可靠的传输协议。UDP:是无连接的,不可靠的传输协议。网络层:网际协议IP、Internet互联网控制报文协议ICMP、Internet组管理协议IGMP。TCP/IP模型TCP/IP起源于美国国防部高级研究规划署(DARPA)的一项研究计划——实现若干台主机的相互通信。现在TCP/IP已成为Internet上通信的工业标准。TCP/IP模型包括4个层次:应用层传输层网络层网络接口TCP/IP与OSI参考模型的对应关系应用层表示层会话层传输层物理层数据链路层网络层7654321OSI参考模型应用层传输层网络接口网络层TCP/IP模型两类传输协议:TCP;UDP尽管TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层同时存在TCP和UDP两个协议。TCP(TransferControlProtocol)是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是serversocket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输。UDP(UserDatagramProtocol)是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。读者可能要问,既然有了保证可靠传输的TCP协议,为什么还要非可靠传输的UDP协议呢?主要的原因有两个:一是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此TCP传输的效率不如UDP高。二是在许多应用中并不需要保证严格的传输可靠性,比如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。两类传输协议:TCP;UDP的比较基于URL的Java网络编程统一资源定位器URLURL(UniformResourceLocator)

,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其它资源。URL的组成:protocol://resourceName。其中协议名指获取资源所使用的传输协议,如http、ftp、file等,资源名是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如:

/协议名://主机名

/home/welcome.html协议名://主机名+文件名

:80/Gamelan/network.html#BOTTOM协议名://机器名+端口号+文件名+内部引用创建一个URL为了表示URL,中实现了类URL。我们可以通过下面的构造方法来初始化一个URL对象:1.publicURL(Stringspec);通过一个表示URL地址的字符串可以构造一个URL对象。URLurlBase=newURL("/");2.publicURL(URLcontext,Stringspec);通过基URL和相对URL构造一个URL对象。URLnet263=newURL("/");URLindex263=newURL(net263,"index.html");3.publicURL(Stringprotocol,Stringhost,Stringfile);newURL("http","","/pages/G.html");4.publicURL(Stringprotocol,Stringhost,intport,Stringfile);URLgamelan=newURL("http","",80,“pages/network.html");解析一个URL一个URL对象生成后,其属性是不能被改变的,但是我们可以通过类URL所提供的方法来获取这些属性:

publicStringgetProtocol()获取该URL的协议名。

publicStringgetHost()获取该URL的主机名。

publicint

getPort()获取该URL的端口号,如果没有设置端口,返回-1。

publicStringgetFile()获取该URL的文件名。

publicStringgetQuery()获取该URL的查询信息。

publicStringgetPath()获取该URL的路径

publicStringgetAuthority()获取该URL的权限信息

publicStringgetUserInfo()获得使用者的信息

publicStringgetRef()获得该URL的锚基于URL的网络编程示例通过URL读取WWW资源——URLReader.java通过URLConnetction连接WWW——TestURLConnection.java在执行applet的浏览器中显示在指定URL处的资源——testurl.html、SiteSelector.java自制浏览器——ReadServerFile.java基于URL的网络编程在底层其实还是基于下面要讲的Socket接口的。基于Socket的低层次Java网络编程

套接字(socket)的引入为了能够方便的开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统调用socket(套接字)。socket的出现,使程序员可以很方便地访问TCP/IP,从而开发各种网络应用的程序。随着Unix的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了Windows等操作系统中。Java语言也引入了套接字编程模型。网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。基于TCP的socket编程ServerServerServerSocket(intport)Socketaccept()OutputStreamSocket.getOutputStream()InputStreamSocket.getInputSream()Socket.close()ClientSocket(InetAddressaddress,intport)OutputStreamSocket.getOutputStream()InputStreamSocket.getInputStream()Socket.close()服务器/客户端程序编写服务器程序编写: ①调用ServerSocket(intport)创建一个服务器端套接字,并绑定到指定端口上;②调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。③调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。④最后关闭通信套接字。客户端程序编写: ①调用Socket()创建一个流套接字,并连接到服务器端;②调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。③最后关闭通信套接字。创建Socketjava在包中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。其构造方法如下:

Socket(InetAddressaddress,intport);Socket(InetAddressaddress,intport,booleanstream);Socket(Stringhost,int

prot);Socket(Stringhost,int

prot,booleanstream);Socket(SocketImpl

impl)Socket(Stringhost,intport,InetAddress

localAddr,int

localPort)Socket(InetAddressaddress,intport,InetAddress

localAddr,int

localPort)ServerSocket(intport);ServerSocket(intport,intbacklog);ServerSocket(intport,intbacklog,InetAddress

bindAddr)基于Socket的网络编程示例简单的Client/Server程序设计——TalkServer.java、TalkServer.javaGUI界面的C/S程序——Server.java、Client.java支持多客户的client/server程序设计前面提供的Client/Server程序只能实现Server和一个客户的对话。在实际应用中,往往是在服务器上运行一个永久的程序,它可以接收来自其它多个客户端的请求,提供相应的服务。为了实现在服务器方给多个客户提供服务的功能,需要对上面的程序进行改造,利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来。代码示例——MultiServer.java、MultiClient.java这个程序向读者展示了网络应用中最为典型的C/S结构,我们可以用下面的图来描述这样一种模型:基于UDP的Socket编程基于UDP的socket编程接收端(Server)发送端(Client)DatagramSocket(intport)DatagramSocket()DatagramPacket(byte[]buf,intlength)DatagramSocket.receive(DatagramPacketp)DatagramSocket.close()DatagramSocket.close()DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport)DatagramSocket.send(DatagramPacketp)接收端程序编写: ①调用DatagramSocket(intport)创建一个数据报套接字,并绑定到指定端口上;②调用DatagramPacket(byte[]buf,intlength),建立一个字节数组以接收UDP包。③调用DatagramSocket类的receive(),接收UDP包。④最后关闭数据报套接字。发送端程序编写: ①调用DatagramSocket()创建一个数据报套接字;②调用DatagramPacket(byte[]buf,intoffset,intlength,InetAddressaddress,intpo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论