分析
代码实现
/*
创建BS版本的服务器
*/
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8080);
/*
开始多线程读取服务器的照片 让服务器一直处于监听的状态
*/
while (true){
Socket socket = server.accept();
new Thread(new Runnable() {
@Override
public void run() {
try{
InputStream ips = socket.getInputStream();
//把ips网络字节输入流对象,转换为字符缓冲输入流
BufferedReader br = new BufferedReader(new InputStreamReader(ips));
//把客户端请求信息的第一行读取出来
String line = br.readLine();
System.out.println(line);
//切割信息,只要中间的部分
String[] arr = line.split(" ");
//把路径前面的/切割出来 arr[0]是 GET
String html = arr[1].substring(1);
//创建一个本地字节输入流,读取html路径
FileInputStream fls =new FileInputStream(html);
//使用Socket的方法OutputStream获取网络字节输出流OutputStream对象
OutputStream ops = socket.getOutputStream();
//写入HTTP协议响应头,固定写法
ops.write("HTTP/1.1 200 OK\r\n".getBytes());
ops.write("Content-Type:text/html\r\n".getBytes());
ops.write("\r\n".getBytes());
//一读一写 把服务器读取的html文件回写到客户端
int len = 0;
byte[] bytes =new byte[1024];
while((len =fls.read(bytes))!=-1){
ops.write(bytes,0,len);
}
fls.close();
socket.close();
}catch (IOException e){
System.out.println(e);
}
}
}).start();
}
}
}