package cn.kgc.progect;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author
* 创建TCP程序 BS版本的服务器
*/
public class BSTCPServer {
public static void main(String[] args) throws IOException{
//1 创建服务器对象ServerSocket 系统的端口号指定 10800
ServerSocket server = new ServerSocket(8080);
while(true){
//2 使用ServerSocket 对象中的方法accept(); 监听并获取请求的客户端Socketd对象(浏览器)
Socket socket = server.accept();
new Thread(new Runnable() {
@Override
public void run() {
try {
// 3 使用Socket对象中的方法 getInputStream 获取网络字节输入流 InputStream对象
InputStream is = socket.getInputStream();
//4 读取客户端请求的信息
// byte[] bytes = new byte[1024];
// int len = is.read(bytes);
// System.out.println(new String(bytes,0,len));
// 把网络字节输入流 转为网络字符缓冲流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//读取 客户请求信息的第一行 包含了页面的地址
String line = br.readLine();
// System.out.println(line);
// 切割字符串 split(" ");
String[] arr = line.split(" ");
//System.out.println(arr[1]);
// 截取 字符串 substring
String path = arr[1].substring(1);
System.out.println(path);// 路径
//创建本地字节输入流 缓冲流进行包装一下 提高效率
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
// 获取网络字节输出流 (缓冲流)
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
// 使用BufferedInputStream ---》read读取html 文件
// 告诉客户端 写的是一个html 文件
bos.write("HTTP/1.1 200 OK\r\n".getBytes());
bos.write("Content-Type:text/html\r\n".getBytes());
bos.write("\r\n".getBytes());
int len = 0;
while ((len = bis.read()) != -1) {
//使用BufferedOutputStream---》write把读取到了html文件 写到客户端显示
bos.write(len);
}
//释放资源
bos.close();
bis.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
// server.close();
}
}
爱旅行项目
最新推荐文章于 2024-06-12 14:33:36 发布