package javaNet;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 模拟实现BS服务器结构
* */
public class TcpBS {
public static void main(String [] args) throws IOException {
//1、首先创建服务器ServerSocket,向系统要指定的端口号
ServerSocket serverSocket = new ServerSocket(8080);
//2、使用serverSocket的方法获取请求客户端的socket
Socket socket =serverSocket.accept();
//3、使用Socket的getInputStream获取网络字节输入流InputStream对象
InputStream is = socket.getInputStream();
//4、把InputStream(is)网络字节输入流转换成字符缓冲输入流
BufferedReader buffr = new BufferedReader(new InputStreamReader(is));
//5、把客户端请求的第一行信息读取出来(字符流所以是BufferedReader中的readLine方法)
String line = buffr.readLine();
System.out.println(line);
//6、把读取的信息切割出来(按照空格切分)
String [] arr = line.split(" ");
//7、把路径前面的“/”去掉
String htmlpath = arr[1].substring(1);
System.out.println(htmlpath);
//8、创建一个本地字节输入流(硬盘读取html--File+InputStream),传入要读取的html路径
FileInputStream fis = new FileInputStream("e:\\"+htmlpath);
//9、使用Socket中的方法getOutputStream获取网络字节输出流OutputStream对象
OutputStream os =socket.getOutputStream();
//10、写入http的固定写法
os.write("HTTP/1.1 200 OK\r\n".getBytes());
os.write("Content-Type:text/html\r\n".getBytes());
//必须写入空行,否则浏览器不解析
os.write("\r\n".getBytes());
//11、一读一写的复制文件,把服务器读取的html文件回写到客户端(字节流)
int len = 0;
byte[] bytes = new byte[1024];
while((len = fis.read(bytes))!=-1)
{
os.write(bytes,0,len);
}
//12、释放资源(socket、InputStream,FileInputStream)
fis.close();
socket.close();
}
}
在这里的代码,在第八个步中,由于我并不是将idea的项目创建在c盘下的,因此需要指定这里的项目的路径!