教材学习内容总结
1.
URL类通常使用如下的构造方法创建一个URL对象:public URL(String spec)throws MalformedURLException
该构造方法使用字符串初始化一个URL对象
URL对象调用InputStream openStream()方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源信息读入到客户端
2.
getByName(String s)将一个域名或IP地址传递给该方法的参数s,获得一个InetAddress对象,该对象含有主机地址的域名和IP地址,该对象用如下格式表示它包含的信息:www.sina.com.cn/202.108.37.40
public String getHostName()获取InetAddress对象所含的域名
public String getHostAddress()获取InerAddress对象所含的IP地址
getLocalHost()获得一个InetAddress对象,该对象含有本地机器的域名和IP地址
3.
网络通信使用IP地址标识Internet上的计算机,使用端口号标识服务器的进程(程序)
端口号规定为一个16位的0~65535之间的整数
客户端程序使用Socket类建立负责连接到服务器的套接字对象
建立连接到服务器的套接字对象:
try{Socket clientSocket=new Socket(http://192.168.0.78,2010);}
catch(IOException e){}
使用方法getInputStream()获得一个输入流
使用方法getOutputStream()获得一个输出流
服务器必须建立一个ServerSocket对象,该对象通过将客户端的套接字对象和服务器端的一个套接字对象连接起来,从而达到连接的目的
使用方法accept()将客户端的套接字和服务器端的套接字连接起来
所谓“接受”客户的套接字连接是指serverForClient调用accept()方法会返回一个和客户端Socket对象相连接的Socket对象。
4.
可以用Socket类的不带参数的构造方法,Socket()创建一个套接字对象,该对象再调用public void connect(SocketAddress endpoint)throws IOException请求和参数SocketAddress指定地址的服务器端的套接字建立连接。为了使用connect方法,可以使用SocketAddress的子类InetSocketAddress创建一个对象,InetSocketAddress的构造方法是public InetSocketAddress(InetAddress addr,int port)。
在套接字通信中,有两个基本原则:
(1)服务器应当启动一个专门的线程,在该线程中和客户的套接字建立连接
(2)由于套接字的输入流在读取信息时可能发生阻塞,客户端和服务器端都需要在一个单独的线程中读取信息
5.
基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证
基于UDP通信的基本模式是:将数据打包、接受发来的数据包
用DatagramSocket类的不带参数的构造方法DatagramSocket()创建一个对象,该对象负责发送数据包
首先用DatagramSocket的另一个构造方法DatagramSocket(int port)创建一个对象,其中的参数必须和待接收的数据包的端口号相同。然后对象mail_in使用方法receive(DatagramSocket pack)接受数据包
6.
Java远程调用是一种分布式技术,使用RMI可以让一个虚拟机上的应用程序请求调用位于网络上另一处的JVM上的对象方法。习惯上称发出调用请求的虚拟机为(本地)客户机,称接受并执行请求的虚拟机为(远程)服务器。
驻留在(远程)服务器上的对象是客户要请求的对象,称作远程对象。
代理的特点是它与远程对象实现了相同的接口。
存根是一种特殊的字节码,并让这个存根产生的对象为作为远程对象的代理。
RMI为了标识一个对象是远程对象,即可以被客户请求的对象,要求远程对象必须实现java.rmi包中的Remote接口,也就是说只有实现该接口的类的实例才被RMI认为是一个远程对象。
由于客户端的远程代理也需要该接口(大使需要和总统保持同样的法则),因此需要将生成的字节码文件RmoteSubject class复制到前面约定的客户机的D:\Client目录中(在实际项目设计中,可以提供Web服务让用户下载该接口的.class文件)
参考资料
《java 2实用教程(第5版)》