网络编程知识点_第1页
网络编程知识点_第2页
网络编程知识点_第3页
网络编程知识点_第4页
网络编程知识点_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、第第3讲讲 java网络编程网络编程网络通信基础网络通信基础1Java中所涉及的网络应用类中所涉及的网络应用类2TCP/IP协议体系结构协议体系结构3socket通信通信4一、网络通信基础一、网络通信基础v Java作为Internet上最流行的网络编程语言,它与生俱来就具有强大的网络功能,其应用程序编程接口(Application Programining Interface,API)包含了很多与网络相关的类和方法,对网络通信提供了全面的支持。v 通过它们可以方便快捷地编写与网络相关的程序,与服务器建立各种形式的连接和传输通道,访问Internet和Web上的信息资源,实现计算机之间的通信。

2、目前,基于Java的网络编程主要集中在以下几方面: ()Applet程序:又称为Java小程序,它嵌套在超文本标记语言(HyperText Markup Language,HTML)文件(网页)中,通过网络下载其代码到本地浏览器的JVM中执行。 ()基于应用层HTTP(Hypertext Transfer Protocol, 超文本传送协议)协议的URL通信程序:它使用.URL类来获取Web文件,实现Web访问。网络通信基础网络通信基础v ()基于传输层TCP协议的Socket通信程序:它使用.Socket类和java. net.ServerSocket类,实现基于TCP套接字(Socket,

3、端口)的可靠的C/S(Client/Server)模式网络通信编程。v ()基于传输层UDP协议的Datagram通信程序:它使用.DatagramPacket类和.DatagramSocket类,提供基于UDP的不可靠的通信机制,如多媒体组播服务。v ()基于Java RMI(Remote Method Invocation,远程方法调用)的分布式应用程序:它使用java.rmi.*包中的类实现各种分布式计算。v ()基于JDBC的网络数据库程序:它使用JDBC(Java Database Connectivity,Java数据库连接)机制,通过网络访问关系型数据库。v ()基于Servle

4、t/JSP(Java Server Page,Java服务器网页)Web服务器程序:使用Servlet/JSP技术,实现Web服务器端的动态网页编程。v ()基于EJB(Enterprise Java Bean,企业级JavaBean)的应用服务器程序:使用EJB技术规范,实现B/A/S(Browser/Application/Server)模式的EJB应用服务器端的编程。网络通信基础网络通信基础v 计算机网络是把地理位置分散、具有独立功能的计算机,用通信线路和通信设备连接起来,以实现资源共享与网络通信的复合系统。 计算机网络由硬件系统、软件系统和通信协议组成。网络按覆盖的地理范围分为LAN(

5、局域网:几十米至数公里)、MAN(城域网:几十公里至数百公里)和WAN(广域网:数百公里以上,甚至上万公里)。v 网络通信是指物理上位于两台计算机上的两个进程之间通过网络交换信息的过程。网络通信的核心是协议。协议是指通信双方进程在通信过程中,为交换信息,实现通信,必须共同遵守的一系列约定和规则。 网络协议由语义、语法和时序三部分组成,语义定义“做什么”(进程之间交换的操作原语),语法定义“如何做”(进程之间所交换的消息的格式),时序定义“何时做”(进程之间交换消息所必须遵循的先后顺序)。通信双方的进程只要遵循同一协议,即可以相互交换信息,而不管这两个进程是用什么样的语言编写的。OSI / RM

6、协议体系结构协议体系结构通信子网边界通信子网边界路由器路由器路由器路由器子网内部协议子网内部协议应用协议应用协议表示协议表示协议会话协议会话协议主机主机B主机主机A应用层应用层表示层表示层会话层会话层传输层传输层网络层网络层数据链路层数据链路层物理层物理层应用层应用层表示层表示层会话层会话层传输层传输层网络层网络层数据链路层数据链路层物理层物理层网络网络数据链路数据链路物理物理网络网络数据链路数据链路物理物理APDUPPDUSPDUTPDU报文分报文分组组帧帧比特比特7654321层次层次协议数据单元协议数据单元网络层:主机网络层:主机-路由器协议路由器协议数据链路层:主机数据链路层:主机-路

7、由器协议路由器协议物理层物理层:主机主机-路由器协议路由器协议OSI/RM模型各层的基本功能模型各层的基本功能v OSI / RM模型共由7层构成,其各层的基本功能是: 物理层是ISO OSI/RM的最低层,它提供物理链路,实现比特流的透明传输 数据链路层为穿越物理链路的信息提供可靠的传输手段,为数据块(帧)发送提供必要的同步、差错控制和流控制,其数据传输的基本单位是帧。 网络层为更高层次提供独立于数据传输和交换技术的系统连接,并负责建立、维持和结束连接,其传输的基本单位是分组,其基本任务包括路由选择、拥塞控制和网络互联等。 传输层为不同系统的会话实体建立端端之间透明、可靠的数据传输,并提供端

8、点间的错误校正和流控制,其传输的基本单位是报文。 会话层为应用程序间的通信提供控制结构,包括建立,管理,终止连接(任务)OSI/RM模型各层的基本功能模型各层的基本功能表示层提供应用进程在数据表示(语法)差异上的独立性,完成数据格式转换,数据加密/解密、数据压缩/解压。应用层是最靠近用户的一层,提供给用户对OSI环境的访问和分布式信息服务,应用层以下各层均通过应用层向应用进程提供服务。v OSI / RM模型遵循的两个基本原则: 由于通信一般是在两个计算机之间发生,因此协议一般是由位于发送方和接收方的两个程序模块实现。 采用分层模型,在每一个层次上,定义对等实体之间的通信协议v OSI / R

9、M模型实现通信的基本原理: 层间通过“接口”实现下层为上层服务,上层使用下层提供的服务 对等层通过“对等层协议”实现虚通信。二、二、Java中所涉及的网络应用类中所涉及的网络应用类v Java网络编程主要处理应用层的任务,但应根据传输层所选协议(TCP或UDP)的不同而选用不同的网络API完成实际的网络通信任务。这些基本网络类主要包含在.*包中,本章所涉及的类如表10-1所示:类名描述.URL.URLC.S.ServerS.DatagramP.DatagramS.MulticastSocket根据URL值访问网络资源。根据URL值实现双向通信。创建客户端Socket类的对象。创建服务器端Ser

10、versocket类的对象。创建一个待发送或接收的数据报对象创建一个用来发送或接收数据报的数据报套接字对象。多播数据报套接字类,它用来发送和接收IP多播包。基于基于HTTP的的URL通信通信URL(Uniform Resource Locater,统一资源定位器)的值表示网络上某个资源(如打印机、文件)的地址,实现了对网络资源的定位,其值由五部分组成,格式如下:: /:端口号/#引用 应用协议:指明获取资源所使用的应用层协议,如HTTP、FTP、FILE等。 主机名:指定资源所在的计算机,它既可以是IP地址,如,也可以是主机名或域名,如localhost和www.sun.co

11、rn。 端口号:用来区分不同的网络服务,指定建立到远程主机 TCP 连接的端口号,若未指定该端口号,则使用协议默认的端口,如http协议的默认端口为 80。 文件名:是包括该文件的完整路径。 引用:是资源内的某个引用,用来定位显示文件内容的位置,如http:/ 1URL类的构造方法为了表示URL,Java中定义了URL类。URL类有6个构造函数,其中常用的有4个(用“*”号标记),如表10-2所示。构造方法功能* URL(String spec) throws MalformedURLException* URL(String protocol, String host, int port,

12、String file) *URL(String protocol, String host, int port, String file, URLStreamHandler handler) * URL(String protocol, String host, String file) URL(URL context, String spec) URL(URL context, String spec, URLStream Handler handler) 根据spec指定的完整URL地址创建URL对象。根据protocol、host、port号和file创建URL对象。根据protoco

13、l、host、port号、file和handler创建URL对象。根据指定的protocol、host和file创建URL对象通过指定的上下文,对给定的spec进行解析创建URL。通过指定的上下文,用指定的处理程序对spec进行解析来创建URL对象。URL构造方法构造方法v 说明:使用URL构造方法创建对象时,若参数有错误,则会产生一个非运行时异常 MalformedURLException,表10-2中的“”表示“throws MalformedURLException”,所以在构造URL对象时必须捕获异常并进行相应处理。v 举例:(http:/ (1)new URL(http:/ (2)n

14、ew URL(http, , 80, /rwweb/index.asp); (3)new URL(http, , 80, /rwweb/index.asp, null); /使用协议的默认流处理程序 (4)new URL(http, , /rwweb/index.asp); /HTTP默认端口为80 (5)URL url = new URL(http:/ new URL(url, index.asp); /多用于访问同一主机上不同路径的文件 (6)new URL(url, index.asp, null); /使用协议的默认流处理程序URL类类常用方法常用方法v 2URL类的常用方法v URL

15、类的常用方法及功能如表10-3所示:v 说明:一旦拥有了URL对象,就可以使用 getAuthority()、getDefaultPort()、getFile()、getHost()、getPath()、getPort()、getProtocol()、getQuery()、getRef()和getUserInfo()v 等方法获取URL的各种属性。在这些URL属性获取方法中,若某些属性不存在,这些方法就返回null或-1。 URL类的常用方法及功能类的常用方法及功能常用方法功能public String getAuthority()public Object getContent()publi

16、c int getDefaultPort()public String getFile()public String getHost()public String getPath()public int getPort()public String getProtocol()public tring getQuery()public String getRef()public String getUserInfo()* public URLConnection openConnection()public URLConnection openConnection(Proxy proxy)* p

17、ublic InputStream openStream()public boolean sameFile(URL other)获得URL实例的授权部分获得URL实例的内容获得URL实例所关联协议的默认端口号获得URL实例的文件名获得URL实例的主机名获得URL实例的路径部分获得URL实例的端口号获得URL实例的协议名称获得URL实例的查询部分 获得URL实例的锚点(“引用”)获得URL实例的userInfo部分返回一个URLConnection对象通过指定的代理建立连接,返回URLConnection对象返回一个用于从该连接读入的InputStream比较两个URL实例,但不包括片段部分op

18、enConnection( )方法方法v 使用URL对象的openConnection( )方法连接到该URL地。v 例:try try URL yahoo = new URL(http:/ URL yahoo = new URL(http:/ URLConnection yahooConnection = URLConnection yahooConnection = yahoo.openConnection()yahoo.openConnection(); ; catch (MalformedURLException e) catch (MalformedURLException e) /

19、 new URL() failed / new URL() failed . . . . . . catch (IOException e) catch (IOException e) / op / op 基于基于TCP的的Socket通信通信(*)v 基于TCP的Socket(套接字)通信是通过指定IP地址以及端口号,采用C/S(Client/Server)模式建立TCP协议下的两个通信进程之间的连接,实现可靠的双向通信,任何一方既可以接受请求,也可以向另一方发送请求。v Java中提供了用于实现客户端套接字的Socket类和用于实现服务器端套接字的ServerSocket类,它们封装了网络

20、数据通信的底层细节,可以方便快捷地实现网络通信编程。三、三、TCP/IP协议体系结构协议体系结构v OSI/RM模型一般被作为网络研究使用。v 目前Internet中使用最广泛的是TCP/IP协议,它是以TCP(Transmission Control Protocol,传输控制协议)和IP(Interconnection Protocol,互连网协议)为代表的协议集,被广泛用于解决计算机网络的互连问题,成为了事实上的工业标准。v TCP/IP协议体系结构分为个独立的层次,其结构如图10-2所示。v Java语言对TCP/IP协议提供了全面的支持。TCP/IP协议体系结构(图)协议体系结构(图

21、)网络接口层网络接口层TELNET/23FTP/20,21SMTP/25HTTP/80TCPUDPIP 以太网以太网FDDIX.25ATM应用层应用层传输层传输层互联网层互联网层TCP/IP协议协议v TCP协议() 它是支持面向连接(在客户端和服务器进程之间需要建立连接)的,“可靠”的字节流传输服务; 它支持流量控制(发送数据的速度绝不超过接收的速度)和拥塞控制(当网络超负荷时,束紧发送端口减缓发送速度),但不提供实时性和最小带宽承诺。v UDP协议() 它是非面向连接(在客户端和服务器进程之间不需要建立连接)的,“不可靠”的数据传输服务; 它不提供连接建立、可靠性保证、流量控制、拥塞控制、

22、实时性和最小带宽承诺。 IP地址与端口号地址与端口号v1IP地址 IP地址是网络通信的重要概念,当前IPv4版本的地址由32个比特来表示,IPv6版本的地址由128个比特来表示。一个IP地址可代表Internet上某台计算机,根据IP地址就可以与其对应的计算机进行通信。 IPv4地址是由点“.”分隔的4个0255的数字组成,比如28。 IP地址由专门的国际机构负责其定义和分配使用,目前IP地址分为A、B、C、D、E五类。由于数字所表示的IP地址难记易忘,通常用符号化的域名来表示。 域名服务器提供域名与IP地址之间相互转换服务,如域名对应这样的IP

23、地址。InetAddress类类v 在java中,Ip地址是由一个称作InetAddress的特殊的类来描述。这个类没有公共的构造函数,但是提供了3个用来获得一个IntelAddress类实例的静态方法: getLocalHost()返回一个本地主机的InteAddress。 getByName()返回对应于指定主机的InetAddress。 getAllByName()对于某个主机有多个IP(多宿主机),可以返回一个IP地址数组。v 额外方法: getAddress()获得一个用字节数组形式表示的IP地址 getHostName()做反查询,获得对应于某个IP地址的主机名。套接字(套接字(s

24、ocket)v 套接字是进程之间的通信的抽象连接点。v 进程之间想通信首先要建立套各自的套接口。客户程序可以向套接口里写入请求,然后服务器会处理这个请求,并把处理结果通过套接口送回。v 具体来说,一个服务器应用程序一般侦听一个特定端口以等待客户的连接请求,当一个连接请求到达时,客户和服务器建立一个通信连接,在连接过程中,客户被分配一个本地端口号并且与一个Socket连接,客户通过写Socket来通知服务器,以读Socket来获取信息。类似地,服务企也获取一个本地端口号,它需要一个新的端口号来侦听原始端口上的其他连接请求。v 服务器也给它的本地端口连接一个Socket并读写它来与客户通信。端口号

25、端口号v 虽然通过IP地址或域名实现了对网络中特定计算机的寻址,但这还不足以完成实际的通信。若接收端计算机的应用层有多个进程(运行中的程序),则发送到该计算机的数据包具体递交给哪个进程处理呢?通常借助于端口号来解决这个问题。 端口号(Port Number)是存在于传输层与应用层的接口编号,它是用16个比特的地址来标识,可提供64K(065535)个端口号 如应用层HTTP协议的默认端口号是80,FTP协议的默认端口号是20/21等。 需要指出的是,端口号具有本地意义,只用来标识本计算机应用层中的各进程,不同计算机中的相同端口号之间没有固定联系,实际上,端口是一个抽象的定位符。v 因此,在数据

26、包接收端的计算机中,将根据传输层所收到的数据包的端口号进行判断,并将该数据包递交给合适的应用层进程来处理。四四、SOCKET通信通信v1Socket通信原理 网络中基于Socket通信的两个进程间建立连接时,会将其中一个进程作为客户端,而另一个进程作为服务器端。 Socket通信机制是一种底层的通信机制。通过Socket的数据是原始字节流信息,通信双方必须依据约定的协议进行处理。v(1)基于Socket通信的C/S模型 使用ServerSocket类和Socket类实现通信的C/S模型如图10-2所示。使用ServerSocket类和Socket类实现通信的C/S模型基于基于Socket通信的

27、基本步骤通信的基本步骤v Step1:使用商定一致的端口分别创建Socket类和ServerSocket类对象;v Step2:服务器端ServerSocket类对象使用阻塞方法accept()监视端口;v Step3:打开连接到客户端Socket类对象的输入/输出流,向服务器端ServerSocket类对象发送相应请求,服务器接受客户请求并返回客户端Socket类的对象,从而建立连接;v Step4:通信双方按照一定的协议对Socket对象进行读/写操作。v Step5:关闭Socket。客户端进程客户端进程v 它会按给定的服务器端的地址及端口号,建立客户端套接字Socket类的对象,并向服

28、务器端发送请求,等待服务器的响应。建立客户端套接字的关键算法代码如下所示:try / 创建客户端Socket类的对象socket,服务器地址取本地,端口号为55558 Socket socket = new Socket(localhost, 55558); catch (UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();例、简单的客户端程序例、简单的客户端程序运行结果运行结果服务器端进程服务器端进程v 它会按与客户端商定的端口号建立服务器端套接字ServerSocket

29、类的对象,然后用ServerSocket对象的阻塞方法accept()监听该端口号中是否有客户端发送的请求。v 若没有请求,则服务器进程会处于等待状态并一直监听端口;一旦接收到客户端发送的请求,accept()方法就会获取返回该客户端对象,从而在服务器端保存与客户端的连接,接下来就可利用该连接实现与客户端之间的数据交换。建立服务器端套接字及端口监听的关键算法代码:try / 以55558为服务端口,创建服务器端的serversocket对象,以监听该端口上的连接ServerSocket serversocket = new ServerSocket(55558); / 创建Socket类的对象

30、socket,用于保存连接到服务器的客户端socket对象Socket socket = serversocket.accept(); catch (IOException e) e.printStackTrace();v 需要指出的是,服务器的端口号和客户端进程中指定的端口号应该一致,否则不能建立连接。 实例、客户端与服务器端简单通信实例、客户端与服务器端简单通信v server.javav client.java基于基于UDP的的Datagram通信通信v 前面介绍的基于TCP的Socket套接字编程是面向连接的、可靠的、端到端的通信。但实际应用中有时只需要发送和接收一些独立的信息,且不需

31、要传输层协议提供可靠性保证。对此,传输层的用户数据报协议(User Datagram Protocol,UDP)提供了相应的通信支持。v UDP通常先把应用层所传递来的数据信息封装为一个个独立的数据报文,称为数据报(Datagram),数据报套接字将发送数据的目的地址记录在数据报中,直接将数据报在网络中传输;v UDP不能保证每个数据报是否能够安全、完整地到达目的主机,不能保证数据报的到达时间和到达顺序,但其传输效率比基于Socket套接字的传输效率高。v 目前,基于UDP的网络应用有大量的实例,如在网络管理领域的SNMP(Simple Network Management Protocol,简单网络管理协议)所采用的就是UDP协议,目的是提高其网络管理数据接收和发送的效率。Datagram套接字套接字v在JDK API的包中提供了与UDP数据报相关的类有DatagramPacket类和DatagramSocket类,前者用于创建一个待发送或接收的

温馨提示

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

评论

0/150

提交评论