在开始写代码之前,先要把准备工作做好:
把学要的资料(即要显示在网页上的html文件 和图片)放在Moudle的根目录下,如图:
package cn.kgc.cn.kgc.bs;
import java.io.IOException;
import java.net.ServerSocket;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.BufferedOutputStream;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
//首先创建服务器的ServerSocket接口对象
ServerSocket server=new ServerSocket(8888);
while(true){
//通过server的accept()方法来对网络端进行监听,并获得网络端Socket对象
Socket socket=server.accept();
//创建多线程,以提高效率
new Thread(new Runnable() {
@Override
public void run() {
try{
//获得网络字节输入流,以便于读取网络端发送的地址请求
InputStream is=socket.getInputStream();
//使用BufferedReader把网络字节输入流包装成网络字符缓冲流,提高读取效率
BufferedReader br=new BufferedReader(new InputStreamReader(is));
//读取网络端返回的字符串请求中的第一行
String line=br.readLine();
//对第一行内容进行分割,以便于下面获取网络端需要访问的文件路径
String[]split=line.split(" ");
/**
* 分割后的元素存放在数组中
* 对下标为1的元素进行截取
* 获得学要的文件路径
*/
String sub=split[1].substring(1);
System.out.println(sub);
/**
* 需要使用服务器的本地字节输入流
* 把文件按照得到的路径写到
* 服务器的内存中
* 然后使用网络字节输出流
* 把内存中的文件写到网络端
*/
//把本地字节输入流和网络字节输出流分别包装成缓冲字符输入流和字符输出缓冲流
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(sub));
BufferedOutputStream bos=new BufferedOutputStream(socket.getOutputStream());
int len=0;
//读取文件
while((len=bis.read())!=-1){
//把文件写到网络端
bos.write(len);
}
//释放资源呢
bos.close();
bis.close();
is.close();
socket.close();
}catch(IOException e){
e.printStackTrace();
}
}
}).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}