第十三章 JAVA网络编程
URL类
使用URL创建对象的应用程序称为客户端程序。URL对象:封装着一个具体资源的引用,表明客户要访问的URL资源。
URL的三大基本信息:
1.协议:URL对象所在的java虚拟机支持的协议。常用协议http、ftp、file
2.地址:能连接的有效的IP地址或域名
3.资源:主机上的任何一个文件
URL的构造方法: pubilc URL (String spec)throws MalformedURLException 用字符串初始化一个URL对象。
读取URL中的资源:调用InputStream openStream()方法返回一个输入流,指向URL对象所包含的资源。
InetAddress类
地址的表示:1.域名 如:www.baidu.com 2.IP地址 202.108.35.210 DNS负责将域名转化为IP地址。
获取地址:
1.InetAddress类的静态方法getByName(String s)将一个域名或IP地址传递给参数s,获得对象。
2.InetAddress类的静态方法getLocalHost()获得对象。
套接字
端口号:网络通信使用IP地址标识计算机,用端口号标识服务器的进程,规定为一个16位的0-65535的证书,其中0-1023被预先定义的服务通信占用。
套接字:当两个程序需要通信时,他们可以通过使用Socket类建立套接字对象并连接在一起(端口号与IP地址组合得出套接字)
套接字对象:客户端程序用Socket类建立负责连接服务器。
构造方法: Socket(String host,int port)host是IP地址,port是端口号。
当套接字对象建立后,可以分别使用getInputStream()或getOutputStream()获得一个输入流和输出流。
ServerSocket对象与服务区套接字对象:
ServerSocket对象用于将客户端的套接字对象和服务器端的套接字对象连接在一起。构造方法:ServerSocket(int poet)port是与客户呼叫的端口号相同的端口号。
在建立了对象后,使用方法accept()就可以将客户端的套接字与服务器端的套接字连接。注:此方法会阻塞线程的执行,知道接受客户的呼叫。close()方法关闭套接字连接。
使用多线程技术:
可以用Socket类的不带参数的构造方法Socket()创建一个套接字对象,该对象在调用connect(SockerAddress endpoint)请求和参数SocketAddress指定地址的服务端的套接字建立连接。为了使用connect方法,可以使用SocketAddress的子类InetSocketAddress 创建一个对象,InetSocketAddress的构造方法是public InetAddress(InetAddress addr,int port)
套接字通信的两个基本原则:
1.服务器应当启动一个专门的线程,在该线程中和客户的套接字建立连接。
2.由于套接字的输入流在读取信息时可能发生阻塞,客户端和服务器端都需要在一个单独的线程中读取信息。
UDP数据报:基于UDP协议的网络信息传输方式
基于UDP的信息传递比TCP快,但可靠性保证低。
基本模式:将数据打包成数据包,然后将数据包发往目的地;接受数据包并查看其中的内容。
发送数据包:用DatagramPacket类打包数据,即用该类创建一个数据包对象。如DatagramPacket(byte data[],int length, InetAddress address,int port)
性质:含有data数组指定的数据;address是目标地址,port是目标端口。
DatagramSocket()负责发送数据包 send
接受数据包
首先用DatagramSocket(int port)的另一个构造方法创建对象,然后对象使用方法receive(DatagramPacket pack)接受数据包,再用另一个方法DatagramPacket(byte data [],int length)创建一个数据包来接收数据包。
广播数据包
Internet的地址是a.b.c.d的形式,当a<128,bcd是主机,称为A类地址;当128≤a≤192,ab表示网络地址,cd为主机地址,为B类地址;当a大于等于192,则abc是网络地址,d是主机地址;224.0.0.0~239.255.255.255是保留地址,为D类地址。
要广播或接受广播的主机必须加入同一个D类地址,即组播地址。
Java远程调用
Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。
远程对象及其代理
远程对象:驻留在远程服务器的对象是客户要请求的对象。
代理:对其他对象提供一种代理以控制对这个对象的访问。
存根:一种特殊的字节码,并让这个存根产生的对象作为远程对象的代理。
Remote接口:标识对象是远程对象。接口中没有方法,只起标识作用,必须扩展该接口。
RMI的设计细节:
1.扩展Remote接口
2.创建远程对象实现接口
3.存根与代理
4.启动注册rmiregistry
5.启动远程对象服务
6.运行客户端程序