网络2
1. InetAddress类
- 作用:发现当前连接在服务器上的客户
- InetAddress包含:客户主机名和IP地址
- 在服务器中使用socket.getInetAddress()方法创建InetAddress的一个实例
- InetAddress的方法:
获取主机名 :getHostName();
获取IP地址:getHostAddress(); - 通过InetAddress的getByName解析主机名或IP地址,本质是通过参数访问DNS获得信息,如下
InetAddress.getByName(“www.bistu.edu.cn”);
输出InetAddress.getHostAddress();得到bistu的IP地址
InetAddress.getByName(“211.82.96.4”);
输出InetAddress.getHostName();得到该IP对应的主机名:www.bistu.edu.cn
2. 服务多客户
用线程处理多客户端同时访问:
2.1为每个连接创建一个线程
While(true){
Socket soc = serverSocket.accept();
ThreadClass th = new ThreadClass(socket);
th.start();
}
2.2在循环中使用InetAddress
While(true){
Socket soc = serverSocket.accept();
InetAddress inetadd=soc.getInetAddress();
System.out.print(InetAddress.getHostname());
}
- 服务器接收数目不限的客户端
- 为了限制连接的并发数目,可以使用一个有固定大小的线程池(executorService)
- 互相独立的线程与相应的客户端通信
- 本质上:服务器为每个客户端提供独立的程序进行服务,所以有1w个客户端访问服务器=服务器内存中创建了1w个相同的服务程序
- 因此服务程序需尽可能的精简
3. Applet客户端
Applet有两种运行方式:
3.1当做一个独立的java程序运行
- Run as an application
- 访问服务器与一般java客户端程序一样
3.2嵌在网页中运行
- 作为网页中的插件运行
- 因为网页可能被部署在不同的服务器上
- 所以建立socket的时候主机地址采用applet的getCodeBase().getHost()获取当前web服务器地址
4. 发送和接收对象
- 通过DataInputstream、Dataoutputstream来传送基本的数据类型(数字,字符……)
- Java 中使用可序列化对象来存放结构化数据,使用ObjectInputStream、ObjectOutputStream进行对象的发送和接收
- 创建序列化数据类
Class student implements java.io.Serializable{…}
ObjectOutputStream.writeObject(s)将student对象写入服务器
ObjectInputStream.readObject()获取客户端送来的对象
5. 从Web服务器上读取文件
- Java运行客户端读取Web服务器上的文件,是通过URL来定位web服务器上的文件的
URL url = new URL(“http://www.bistu.edu.cn/index.html”);
InputStream is = url.openStream();
InputStreamReader r = new InputStreamReader(is)
r.readLine();逐行读出文件内容
6. JEditorPane类
- Javax.swing.JEditorPane 是GUI中的一个组件,能自动显示指定URL的文件,可显示文件有三种:
普通文本文件txt
网页文件html
富文本文件rtf
该控件实现最基本的浏览器功能。 - 关键语句:
JEditorPan jep = new JEditorPane();
Jep.setPage(url);//设置显示的URL资源
- 实现网页超链接功能
Jep.addHyperlinkListener(
new HyperlinkListener(){
public void actionPerformed(ActionEvent e){
jep.setPage(e.getURL());
}
}
)