Java面向对象程序设计-课件 第10章 Java网络编程_第1页
Java面向对象程序设计-课件 第10章 Java网络编程_第2页
Java面向对象程序设计-课件 第10章 Java网络编程_第3页
Java面向对象程序设计-课件 第10章 Java网络编程_第4页
Java面向对象程序设计-课件 第10章 Java网络编程_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

网络编程21、Java与Internet ——Java中的网络通信

网络应用是Java语言取得成功的领域之一,它已经成为现在Internet上最流行的一种编程语言。Java语言在网络编程方面提供了许多方便,其他语言往往需要数页代码才能完成的事情,在Java中可能只需要一条语句就可以。

Java的网络通信分为三个层次:最高一级的网络通信是Applet。客户端浏览器通过HTML文件中的<applet>标记来识别Applet,并解析Applet的属性,通过网络获取Applet得字节码文件。(由浏览器提供)次一级的通信(声音文件和图象文件的获取)。通过类URL的对象指明文件所在位置,并从网络上下载声音和图象文件。(由Java开发环境提供)最低一级的通信是利用包中提供的类直接在程序中实现网络通信。(由Java语言开发包提供)3Java提供的网络功能有三大类:URL,Socket,Datagram.URL是三大功能中最高级的一种,通过URLJava程序可以直接送出或读入网络上的数据.Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道.Datagram是更低级的网络传输方式,它把数据的目的纪录在数据包中,然后直接放在网络上.4

TCP/IP(传输控制协议/网间协议)是Internet的主要协议,定义了计算机和外设进行通信所使用的规则。TCP/IP网络参考模型包括五个层次:应用层、传输层、网络层、链路层、物理层。

ISO/OSI网络参考模型则包括七个层次:应用层、表示层、会话层、传输层、网络层、链路层、物理层。1、Java与Internet ——网络基本概念物理层5

大多数基于Internet的应用程序被看作TCP/IP网络的最上层,如:ftp,http,smtp,pop3,telnet,nntp等。网络层对TCP/IP网络中的硬件资源进行标识。连接到TCP/IP网络中的每台计算机(或其他设备)都有唯一的地址,这就是IP地址。IP地址实质上是一个32位的整数,通常以“%d.%d.%d.%d”的形式表示,每个d是一个8位整数。在TCP/IP网络中,不同的机器之间进行通信时,数据的传输是由传输层控制的,这包括数据要发往的目标机器及应用程序、数据的质量控制等。TCP/IP网络中最常用的传输协议就是TCP(TransportControlProtocol)和UDP(UserDatagramProtocol)。1、Java与Internet ——网络基本概念6端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问之

一台机器只通过一条链路连接到网络上,但一台机器中往往有很多应用程序需要进行网络通信,如何区分呢?这就要靠网络端口号(port)了。

端口号是一个标记机器的逻辑通信信道的正整数,端口号不是物理实体。IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的最后终结点,它是TCP和UDP的基础。网络服务httpftp其他服务23telnet数据结构I/O缓冲区端口2180客户程序SocketIP,portIP与端口号组合而得出的Socket,可以完全分辨Internet上运行的程序。7端口号是用一个16位的整数来表达的,其范围为0~65535,其中0~1023为系统所保留,专门给那些通用的服务.如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口为23当我们编写通信程序时,应选择一个大于1023的数作为端口号,以免发生冲突。1、Java与Internet ——网络基本概念81、Java与Internet ——网络基本概念传输层通常以TCP和UDP协议来控制端点到端点的通信。传输控制协议(TCP)是在端点与端点之间建立持续的连接而进行通信。建立连接后,发送端将发送的数据印记了序列号和错误检测代码,并以字节流的方式发送出去;接收端则对数据进行错误检查并按序列顺序将数据整理好,数据在需要时可以重新发送,因此整个字节流到达接收端时完好无缺。这与两个人打电话的情形是相似的。TCP协议具有可靠性和有序性,并且以字节流的方式发送数据,它通常被称为流通信协议。91、Java与Internet ——网络基本概念数据报协议(UDP)则是一种无连接的传输协议。利用UDP协议进行数据传输时,首先需要将要传输的数据定义成数据报(Datagram),在数据报中指明数据所要达到的Socket(主机地址和端口号),然后再将数据报发送出去。这种传输方式是无序的,也不能确保绝对的安全可靠,但它很简单也具有比较高的效率,这与通过邮局发送邮件的情形非常相似。TCP协议和UDP协议各有各的用处。当对所传输的数据具有时序性和可靠性等要求时,应使用TCP协议;当传输的数据比较简单、对时序等无要求时,UDP协议能发挥更好的作用,如ping,发送时间数据等。101、Java与Internet ——Java中的网络支持

针对网络通信的不同层次,Java提供的网络功能有四大类:InetAddress、URLs、Sockets、Datagram。

InetAddress面向的是IP层,用于标识网络上的硬件资源。

URL面向的应用层,通过URL,Java程序可以直接送出或读入网络上的数据。

Sockets和Datagram面向的则是传输层。Sockets使用的是TCP协议,这是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道进行通信。Datagram则使用UDP协议,是另一种网络传输方式,它把数据的目的地纪录在数据包中,然后直接放在网络上。111、Java与Internet ——Java中的网络支持包中的主要的类和可能产生的例外包括:面向IP层的类:InetAddress面向应用层的类:URL、URLConnection面向网络层的类:TCP协议相关类:Socket、ServerSocketUDP协议相关类:DatagramPacket、DatagramSocket、MulticastSocket可能产生的例外:BindException、ConnectException、MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、UnknownHostException、UnknownServiceExceptionInetAddress可以用于标识网络上的硬件资源,它提供了一系列方法以描述、获取及使用网络资源。InetAddress类没有构造函数,它提供的静态方法来获取:publicstaticInetAddressgetByName(String

host):host可以是一个机器名,也可以是一个形如“%d.%d.%d.%d”的IP地址或一个DSN域名。publicstaticInetAddressgetLocalHost()publicstaticInetAddress[]getAllByName(String

host)以下是InetAddress类的几个主要方法:publicbyte[]getAddress():获得本对象的IP地址(存放在字节数组中)。publicStringgetHostAddress():获得本对象的IP地址“%d.%d.%d.%d”。publicStringgetHostName():获得本对象的机器名。2、使用InetAddress13

下面的例子演示Java如何根据域名自动到DNS(域名服务)上查找IP地址:publicclassGetIP{publicstaticvoidmain(Stringargs[]){InetAddresszust=null;try{zust=InetAddress.getByName(“”);}catch(UnknownHostExceptione){}System.out.println(zust);}}2、使用InetAddress14

通过InetAddress,可以获取本机的IP地址:publicclassgetLocalHostTest{publicstaticvoidmain(){InetAddressmyIP=null;try{myIP=InetAddress.getLocalHost();}catch(UnknownHostExceptione){}System.out.println(myIP);}}2、使用InetAddress153、使用URLURL是统一资源定位符(UniformResourceLocator)的简称,它表示Internet上某一资源的地址。Internet上的资源包括HTML文件、图象文件、声音文件、动画文件以及其他任何内容(并不完全是文件,也可以是一个对数据库的查询等)。通过URL,就可以访问Internet。浏览器或其他程序通过解析给定的URL就可以在网络上查找相应的文件或其他资源。163、使用URL

一个URL包括两部分内容:协议名称和资源名称,中间用冒号隔开:

Protocol:resourceName如:

:9090/index.html

协议名称指的是获取资源时所使用的应用层协议,如http,ftp,file等,资源名称则是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。当然,并不是所有的URL都必须包含这些内容。173、使用URL ——在Java中构造URL

在包中,提供了类URL来表示URL。类URL提供了很多构造方法来生成一个URL对象:publicURL(String

spec)

publicURL(URLcontext,Stringspec)publicURL(String

protocol,String

host,String

file)publicURL(String

protocol,String

host,int

port,String

file)以下是一些具体的构造实例:URLurl1=newURL(“/index.html”);URLbase=newURL(“”);URLurl2=newURL(base,“index.html”);URLurl3=newURL(base,“aa.html”);URLurl4=newURL(“http”,“”,“/yjd/test.html”);URLurl5=newURL(“http”,“”,8080,“/java/index.html”);

另外还有两种稍微复杂些的构造方法。18

一个URL对象生成后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性:publicStringgetProtocol():获取该URL的协议名publicStringgetHost():获取该URL的主机名publicStringgetPort():获取该URL的端口号publicStringgetPath():获取该URL的文件路径publicStringgetFile():获取该URL的文件名publicStringgetRef():获取该URL在文件中的相对位置publicStringgetQuery():获取该URL的查询名3、使用URL ——URL的基本方法193、使用URL ——通过URL读取www信息URL类提供的方法openStream(),就可以读取一个URL对象所指定的资源。publicfinalInputStream

openStream()

openStream()与指定的URL建立连接并返回一个InputStream对象,将URL位置的资源转成一个数据流。通过这个InputStream对象,就可以读取资源中的数据。URLJava程序InputStream203、使用URL ——通过URL读取www信息import.*;importjava.io.*;publicclassURLReader{publicstaticvoidmain(Stringargs[])throwsException{URLurl=newURL("/aa.htm");BufferedReaderin=newBufferedReader(newInputStreamReader(url.openStream()));Stringline;while((line=in.readLine())!=null){System.out.println(line);}in.close();}}}213、使用URL ——URLConnectionopenStream(),只能从网络上读取资源中的数据。URLConnection类,可以在应用程序和URL资源之间进行交互,既可以从URL中读取数据,也可以向URL中发送数据。URLConnection类表示了应用程序和URL资源之间的通信连接。try{URLurl=newURL(“”);

URLConnection

uc=url.openConnection();}catch(MalformedURLExceptione1){

…}catch(IOExceptione2){

…}223、使用URL ——URLConnectionpublicclassURLConnectionReader{publicstaticvoidmain(Stringargs[])throwsException{URLurl=newURL("/test.htm");URLConnectionuc=url.openConnection();BufferedReaderin=newBufferedReader(newInputStreamReader(uc.getInputStream()));Stringline;while((line=in.readLine())!=null){System.out.println(line);}in.close();}}通过getInputStream()

方法,应用程序就可以读取资源中的数据。事实上,类URL的方法openStream()就是通过URLConnection类来实现的,它等价于:openConnection().getInputStream();URLConnection中最常用的两个方法是:InputStream

getInputStream()

OutputStreamgetOutputStream()

234、Socket通信

在Java中,基于TCP协议实现网络通信的类有两个:在客户端的Socket类和在服务器端的ServerSocket类。在服务器端通过指定一个用来等待的连接的端口号创建一个ServerSocket实例。在客户端通过规定一个主机和端口号创建一个socket实例,连到服务器上。

ServerSocket类的accept方法使服务器处于阻塞状态,等待用户请求。24构造方法:publicSocket(String

host,int

port)publicSocket(InetAddress

address,int

port)publicSocket(String

host,int

port,InetAddress

localAddr,int

localPort)publicSocket(InetAddress

address,int

port,InetAddress

localAddr,int

localPort)

4、Socket通信

----

类Socket25Socket的输入/输出流管理publicInputStreamgetInputStream()publicOutputStreamgetOutputStream()设置/获取Socket数据publicInetAddressgetInetAddress()publicintgetPort()publicvoidsetSoTimeout(int

timeout):读取数据时阻塞链路的超时时间4、Socket通信

----

类Socket26

构造方法:publicServerSocket(int

port)publicServerSocket(int

port,int

backlog):支持指定数目的连接publicServerSocket(int

port,int

backlog,InetAddress

bindAddr)主要方法publicSocketaccept():等待客户端的连接

4、Socket通信

----类ServerSocket274、Socket通信

无论一个Socket通信程序的功能多么齐全、程序多么复杂,其基本结构都是一样的,都包括以下四个基本步骤:1、在客户方和服务器方创建Socket/ServerSocket。2、打开连接到Socket的输入/输出流。3、利用输入/输出流,按照一定的协议对Socket进行读/写操作。4、关闭输入/输出流和Socket。通常,程序员的主要工作是针对所要完成的功能在第3步进行编程,第1、2、4步对所有的通信程序来说几乎都是一样的。284、Socket通信ServerServerSocket(port#)Socketsocket=

ServerSocket.accept()接收连接OutputStreamInputStreamCloseSocketClientSocket(host,port#)与服务器建立连接OutputStreamInputStreamCloseSocketsocket294、Socket通信1、建立Socket在客户端:try{

Socketclient=newSocket(host,4444);}catch(IOExceptione){}在服务器端:try{

ServerSocketserver=newServerSocket(4444);}catch(IOExceptione){}Socketsocket=null;try{

socket=server.accept();//等待客户端连接}catch(IOExceptione){}2、在客户端和服务器端同时打开输入/输出流方法getInputStream()和getOutputStream()来得到Socket对应的输入/输出流以进行数据读写操作,它们分别返回InputStream对象和OutputStream对象。为了便于读写数据,应在返回的输入/输出流对象上建立过滤流,如DataInputStram/DataOutputStram、BufferedInputStream/BufferedOutputStream、PrintStream;InputStreamReader/OutputStreamWriter、BufferedReader/BufferedWriter、PrintWriter等。BufferedReader=newBufferedReader(newInputStreamReader(socket.getInputStream()));BufferedWriter=newBufferedWriter(newInputStreamWriter(socket.getOutputStream()));3、关闭输入/输出流和Socket先关闭所有相关的输入/输出流,再关闭Socket。4、Socket通信31创建服务器(端口号)定义数据成员服务器等待网络连接建立socket流发送谈话信息接收用户谈话信息创建Socket实例定义数据成员建立socket流发送谈话信息接收服务器谈话信息关闭流accept()44444444结束谈话(Bye.)结束谈话(Bye.)关闭流服务器端客户端324、Socket通信SingleTalkClient.javacase:2、客户端SingleTalkServer.java1、服务器端334、Socket通信

——简单的Client/Server

在本地机器上测试网络程序用回绕地址

Socketsocket=newSocket(“”,4444);建立socket连接后,还应该建立输入输出数据流。要控制好输入/输出流和Socket关闭的时间。如果网络的一端已经关闭,另一端读到null。在运行时,服务器端程序一般应先行启动。34Server1(

温馨提示

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

评论

0/150

提交评论