教材内容学习
1.1UPL类
URL类是java.net包中有关重要的类,使用URL创建对象的应用程序称为客户端程序
1、UPL构造方法
URL类通常使用如下构造方法创建一个URL对象:
public URL(String spec)throws MalformedURLException
2、读取URL中的资源
URL对象调用InputStream openStream()方法可以返回一个输入流,该输入流指向URL对象包含的资源。通过该入流可以将服务器上的资源信息读入客户端
1.2InetAddress类
1、地址的表示
(1)域名
例如:www.tsinghua.edu.cn
(2)IP地址
例如:202.108.35.210
2、获取地址
(1)获取Internet上主机的地址
可以使用IneAddrss类的静态方法getByName(String s)将一个域名或IP地址传递给该方法的参数s,获得一个InetAddress对象,该对象含有主机地址的域名和IP地址
InetAddress类中还有两个实例方法:
①public String getHostName()获取InetAddress对象所含的域名
②public String getHostAddress()获取InetAddress对象所含的IP地址
(2)获取本地机的地址
可以使用InetAddress类的静态方法getLocalHost()获得一个InetAddress对象,该对象含有本地机器的域名和IP地址
1.3套接字
1、套接字概述
网络通信使用IP地址标识Internet上的计算机,使用端口号标识服务器上的进程(程序)
当两个程序需要通信时,他们可以通过使用Socket类建立套接字对象并连接在一起
2、客户端套接字
客户端程序使用Socket类建立放着连接带服务器的套接字对象
当套接字对象clientSocket建立后,clientSocket可以使用方法getInputStream()获得一个输入流,使用getOnputStream()获得一个输出流
3、ServerSocket对象与服务器端套接字
为了能使客户连接到服务器,服务器必须建立一个ServerSocket对象,该对象通过将客户端的套接字对象和服务器端的一个套接字对象连接起来
ServerSocket的构造方法是ServerSocket(int port),port是一个端口号。port必须和客户呼叫的端口号相同
当服务器的ServerSocket对象serverForClient建立后,就可以使用方法accept()将客户端的套接字和服务器端的套接字连接起来,代码如下:
try{Socket sc=serverForClient.accept();
}
catch(IOException){}
注:accept方法会阻塞线程的执行,知道接收到客户的呼叫
建立连接后,服务器端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有客户端的IP地址和域名,同样客户端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有客户端的IP地址和域名
4、使用多线程技术
可以使用Socket类的不带参数的构造方法Socket()创建一个套接字对象,该对象再调用public void connect(SocketAddress endpoint)throw IOEception请求和参数SocketAddress指定地址的服务器端的套接字建立连接
在套接字通信中,有两个基本原则:
①服务器应当启动一个专门的线程,在该线程中和客户的套接字建立连接
②由于套接字的输入流在读取信息时可能发生阻塞,客户端和服务器端都需要在一个单独的线程中读取信息
1.4UDP数据报
基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证
基于UDP的通信模式
①将数据打包,称为数据包,然后将数据包发往目的地
②接收发来的数据包,然后查看数据包的内容
1、发送数据包
用DatagramPacket类将数据打包,即用DatagramPacket类创建一个对象,称为数据包
使用该方法的创建的数据对象具有下列两个性质:
①含有data数组指定的数据
②该数据包将发送到地址是address,端口号是port的主机上
用DatagramPacket类不带参数的构造方法DatagramPacket()创建一个对象,该对象负责发送数据包
2、接收数据包
首先用DatagramPacket的另一个构造方法DatagramPacket(int port)创建一个对象,其中的参数必须和待接收的数据包的端口号相同
然后对象使用方法receive(DatagramPacket pack)接收数据包
1.6Java远程调用
Java远程调用是一种分布式技术
1、远程对象及代理
(1)远程对象
驻留在服务器上的对象是客户要请求得到对象,称作远程对象
(2)代理与存根
代理的特点是:它与远程对象实现相同的接口
存根:是一种特殊的字节码,并让这个存根产生的对象作为远程对象的代理
(3)Remote接口
RMI为了标识一个对象是远程对象,即可以被客户请求的对象,要求远程对象必须实现java.rmi包中的Remote接口,也就是说只有实现该接口的类实例才被RMI认为是一个远程对象
2、RMI的设计细节
(1)扩展Remote接口
定义一个接口是java.rmi包中Remote的子接口,即扩展Remote接口
(2)远程对象
创建远程对象的类必须要实现Remote接口,RMI申通Remote接口来标识远程对象
(3)存根与代理
RMI负责产生存根,如果穿远程对象的字节码是RemoteConcrete Subject.class那么存根的字节码是RemoteConcrete Subject_Stub.class
(4)启动注册:rmiregistry
在远程服务器创建远程对象之前,RMI要求远程服务器必须首先启动注册rmiregistry
(5)启动远程对象服务
(6)运行客户端程序