Java入门--Socket创建BSServe
首先在项目的根路径下, 创建一个 demo.html (内容随便写写)
在Java主程序中
package io.github.wangermaizi.day10;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
// BS-TCP
public class BSServe {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8848);
Socket socketClient = serverSocket.accept();
InputStream ips = socketClient.getInputStream();
/*
// 能读取关于本次请求的一些浏览器信息
int len = 0;
byte[] bytes = new byte[1024];
while ((len = ips.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
*/
// GET /day06/index.html
// 根据上述页面需要给浏览器相应内容
// 把 ips 网络字节流对象, 转为字符缓冲流
BufferedReader br = new BufferedReader(new InputStreamReader(ips));
// 通过缓冲流读取第一行
String line = br.readLine();
// 把读取信息进行切割, 只要中间的部分
String[] arr = line.split(" ");
// 把前面的 /去掉就是 html位于项目的路径
String htmlPath = arr[1].substring(1);
// 根据路径读取本地文件
FileInputStream fis = new FileInputStream(htmlPath);
// 写入浏览器 HTTP的相应头, 固定写法
OutputStream ops = socketClient.getOutputStream();
ops.write("HTTP/1.1 200 OK\r\n".getBytes());
ops.write("Content-Type:text/html\r\n".getBytes());
// 必须加入空行否则文件不解析
ops.write("\r\n".getBytes());
// 通过 socket写入流, 响应出去 (文件资源的回写)
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
ops.write(bytes, 0, len);
}
socketClient.shutdownInput();
fis.close();
ops.close();
socketClient.close();
serverSocket.close();
}
}