Java网络的基本知识_第1页
Java网络的基本知识_第2页
Java网络的基本知识_第3页
Java网络的基本知识_第4页
Java网络的基本知识_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

11.1使用URL[1]

URL类是对统一资源定位符(UniformResourceLocator)的抽象,使用URL创建对象的应用程序称作客户端程序,一个URL对象存放着一个具体的资源的引用,表明客户要访问这个URL中的资源,利用URL对象可以获取URL中的资源.//home/welcome.html:80/gamelan/network.html#bottom11.1使用URL[2]

URL对象通常包含最基本的三部分信息:协议、地址、资源.协议名:http,ftp,gopher,file等资源名:主机名,端口号,文件名,文件名内部的一个引用URL的构造方法publicURL(Stringspec)throwsMalformedURLExceptiontry{url=newURL("");}catch(MalformedURLExceptione){System.out.println("BadURL:"+url);}11.2读取URL中的资源

URL对象调用InputStreamopenStream()方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源信息读入到客户端。例子11.1在一个文本框中输入网址,按在确定后,读取URL上的资源。为避免网络阻塞,用一个线程读取URL。11.3显示URL资源中的html文件

Javax.swing包中的JEditorPane容器可以解释执行html文件,也就是说,如果你把html文件读入到JEditorPane,该html文件就会被解释执行,显示在JEditorPane容器中,这样程序就看到了网页的运行效果。例子11.2显示指定URL中的HTML页内容。11.4处理超链接

当JEditorPane对象调用setEditable方法将编辑属性设为false时,不仅可以显示网页的运行效果,而且用户如果单击网页中超链接还可以使得JEditorPane对象触发HyperlinkEvent事件。程序可以通过处理HyperlinkEvent事件,来显示新的URL资源。例子11.3单击超链时,JEditorPane显示超链的网页内容。11.5InetAdress类

包中的InetAddress类对象含有一个Internet主机地址的域名和IP地址:

10。域名容易记忆,当你在连接网络时输入一个主机的域名后,域名服务器(DNS)负责将域名转化成IP地址,这样我们才能和主机建立连接。11.6套接字

1.套接字socket[1]IP地址标识Internet上的计算机,端口号标识正在计算机上运行的进程(程序)。端口号与IP地址的组合得出一个网络套接字。1.套接字socket[2]网络通信一般为Client/Server模式,其中Server:运行一个特定的程序,申请一个Socket,该Socket在某一Port监听客户机的连接。1.套接字socket[3]

Client:申请一个Socket,将该Socket与服务器端的Port相联,服务器在接受该Client的连接后,新生成一个Port,在该新Port与Client通信;原Port继续监听,准备接受新的

Client的连接。2.客户端的套接字对象[1]

客户端建立到服务器的套接字连接try{Socketmysocket=

new

Socket(“8”,1880);}catch(IOExceptione){}在mysocket上获取输入输出流,用于发送及接收信息2.客户端的套接字对象[2]获取输入输出流套接字连接mysocket建立后,mysocket可以使用方法getInputStream()获得一个输入流,然后用这个输入流读取服务器放入“线路”的信息(但不能读取自己放入“线路”的信息,就象打电话时,我们只能听到对方放入线路里的声音一样)。mysocket还可以使用方法getOutputStream()获得一个输出流,然后用这个输出流将信息写入“线路”。3.服务器端的套接字对象[1]服务器必须建立一个等待接收客户的套接字的ServerSocket对象。ServerSocket的构造方法是:

ServerSocket(intport)

port是一个端口号。port必须和客户呼叫的端口号相同。3.服务器端的套接字对象[2]当服务器的ServerSocket对象server_socket建立后,就可以使用方法accept()接收客户的套接字连接呼叫,所谓“接收”客户的套接字连接就是accept()会返回一个和客户端Socket对象相连接的驻留在服务器端的Socket对象,服务器端的这个Socket对象sc使用方法getOutputStream()获得的输出流将指向客户端Socket对象mysocket使用方法getInputStream()获得的那个输入流;同样,服务器端的这个Socket对象sc使用方法getInputStream()获得的输入流将指向客户端Socket对象mysocket使用方法getOutputStream()获得的那个输出流socket通信的一般结构Server端ServerSocket(port)ServerSocket.Accept()OutputStreamInputStreamSocket.Close()Client端Socket(host,port)OutputStreamInputStreamSocket.Close()套接字连接示意图基于socket的Client/server例子例子11.5Client:每隔500ms向服务器发送一个奇数Server:首先回复“你好,我是服务器”,然后将收到的数乘2再发回给client.readUTFUTF:Unicode/UCSTransformationFormat

UTF-8,8bit编码,ASCII不作变换,其他字符做变长编码,每个字符1-3byte.通常作为外码.有以下优点:

*与CPU字节顺序无关,可以在不同平台之间交流

*容错能力高,任何一个字节损坏后,最多只会导致一个编码码位损失,不会链锁错误(如GB码错一个字节就会整行乱码)

UTF-16,16bit编码,是变长码,大致相当于20位编码,值在0到0x10FFFF之间,基本上就是unicode编码的实现.它是变长码,与CPU字序有关,但因为最省空间,常作为网络传输的外码.4.把套接字连接入在线程中例子11.5只能响应一个客户机的连接,我们需要能为多个客户服务的服务器,为此将服务器的套接字服务放入线程中。例子11.6,可同时为多个客户的提供服务。11.7网络中的数据压缩与传输[1]

当使用套接字进行网络通信时,可以使用ZipOutputStream流进行数据压缩,将套接字返回的输出流作为ZipOutputStream流的底层流,然后ZipOutputStream流out将数据压缩到底层流发送到目的地。11.7网络中的数据压缩与传输[2]使用ZipOutputStream类可以若干个文件压缩到底层流发送到目的地。首先使用ZipOutputStream类的构造方法publicZipOutputStream(OutputStreamout)创建一个对象,该对象以套接字返回的输出流作为目的地,即作为该流的底层流例子11.7服务器端通过socket将两个文件压缩后发送给客户端。11.8UDP数据报[1]

数据报通信UDP和流式通信TCPSocket工作方式是一种连接方式,其特点是通讯稳定可靠,I/O操作始终在同一对进程之间进行。数据报是一种非连接方式,通讯数据经过不确定的路径传向目的地,可靠性和正确性都不能保证,甚至可能数据就根本到不了目的地,每次发出数据报时其中含有完整的数据和地址信息,不同的数据报可以发往不同的目的地,这样,数据报通讯就可以和多个服务器进行通讯。11.8UDP数据报[2]

基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证。也就是说,数据在传输时,用户无法知道数据能否正确到达目的地主机,也不能确定数据到达目的地的顺序是否和发送的顺序相同。<Socket通讯流机制好比是打电话,而数据报机制则更像是邮信。>11.8UDP数据报[3]

基于UDP通信的基本模式是:(1)将数据打包,称为数据包(好比将信件装入信封一样),然后将数据包发往目的地。(2)接受别人发来的数据包(好比接收信封一样),然后查看数据包中的内容。发送和接收数据报需要使用Java类库中的DatagramPacket类和DatagramSocket类

1.发送数据包[1]

用DatagramPacket的构造方法创建待发送的数据包:

DatagramPacket(bytedata[],intlength,InetAddtressaddress,intport):1.发送数据包[2]

使用该构造方法创建的数据报对象具有下列两个性质:含有data数组指定的数据。该数据包将发送到地址是address、端口号是port的主机上。用DatagramSocket类的不带参数的构造方法:DatagramSocket()创建一个对象,该对象负责发送数据包。1.发送数据包[3]

发送端的程序:DatagramPacketoutpacket=newDatagramPacket(message,200,“1”,80);//构造数据包DatagramSocketoutsocket=newDatagramSocket();//构造数据报实例outsocket.send(outpacket);//发送2.接收数据包[1]用DatagramSocket类另一个构造方法:DatagramSocket(intport)创建一个对象,其中的参数必须和待接收的数据包的端口号相同。DatagramSocket对象使用方法receive(DatagramPacketpack)接受数据包.2.接收数据包[2]DatagramPacketinpacket=newDatagramPacket(inbuffer,inbuffer.length);//构造接收包DatagramSocketinsocket=newDatagramSocket(80);//构造数据报实例insocket.receive(inpacket);//接收数据//receive方法会阻塞,直到接收数据包例子例子11.8,客户机/服务器互相发送和接收数据包。11.9广播数据报[1]

Internet的地址是a.b.c.d的形式。当a小于128,那么b.c.d就用来表示主机,这类地址称做A类地址。如果a大于等于128并且小于192,则a.b表示网络地址,而c.d表示主机地址,这类地址称做B类地址。如果a大于等于192,则网络地址是a.b.c,d表示主机地址,这类地址称做C类地址。~55是组播地址,称做D类地址。11.9广播数据报[2]

。要广播或接收广播的主机都必须加入到同一个D类地址。一个D类地址也称做一个组播地址,D类地址并不代表某个特定主机的位置,一个具有A、B或C类地址的主机要广播数据或接收广播,都必须加入到同一个D类地址。加入到同一个组播地址的主机可以在某个端口上广播信息,也可以在某个端口号上接收信息。11.9广播数据报[3]MulticastSocket类允许用户发送和接收使用多点发送IP的数据报。若要发送或接收多点广播数据,必须首先创建一个多点广播套接字(多点广播套接字类似于数据报套接字,事实上MulticastSocket是DatagramSocket的一个子类)。

11.9广播数据报

[4]若要发送一个数据报时,在构造器指定端口号来创建多点广播套接字:

publicMulticastSocket()throwsIOException

publicMulticastSocket(intportNumber)throwsIOException11.9广播数据报

[5]要加入到一个多点广播地址,可使用joinGroup方法;若要脱离一个组,相使用leaveGroup方法:

publicvoidjionGroup(InetAddressmulticastAddr)throwsIOException

publicvoidleaveGroup(InetAddressmulticastAddr)throwsIOException11.9广播数据报[6]

例子11.9。发送广播信息/接收广播信息11.10

微型HTTP服务程序。

//file:TinyHttpd.javaimport.*;importjava.io.*;importjava.util.*;publicclassTinyHttpd{publicstaticvoidmain(Stringargv[])throwsIOException{ServerSocketss=newServerSocket(Integer.parseInt(argv[0]));while(true)newTinyHttpdConnection(ss.accept()).start();}}//endofclassTinyHttpdclassTinyHttpdConnectionextendsThread{Socketclient;TinyHttpdConnection(Socketclient)throwsSocketException{this.client=client;setPriority(NORM_PRIORITY-1);}publicvoidrun(){try{BufferedReaderin=newBufferedReader(newInputStreamReader(client.getInputStream(),"8859_1"));OutputStreamout=client.getOutputStream();PrintWriterpout=newPrintWriter(newOutputStreamWriter(out,"8859_1"),true);Stringrequest=in.readLine();System.out.println("Request:"+request);StringTokenizerst=newStringTokenizer(req

温馨提示

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

评论

0/150

提交评论