package SockectServer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServe {
public static void main(String[] args) throws Exception {
//创建端口号为9995
ServerSocket server=new ServerSocket(9995);
//等待浏览器的连接
Socket accept = server.accept();
// getInputStream方法得到的是一个字节输入流
// InputStreamReader 将字节转换字符
// BufferedReader缓冲流基于字符流,也是转换
BufferedReader reader=new BufferedReader(new InputStreamReader(accept.getInputStream()));
System.out.println("浏览器请求成功!");
//读取第一行 请求行
String readLine = reader.readLine();
System.out.println(readLine);
// 自动读取下一行 请求头 判断请求头最后一行是空行之后 跳出循环
while(true) {
String respones=reader.readLine();
System.out.println(respones);
if(respones.equals("")) {
break;
}
}
}
}
-
getInputStream方法得到的是一个输入流,服务端的Socket对象上的getInputStream方法得到的输入流其实就是从客户端发送给服务器端的数据流。
-
getOutputStream方法得到的是一个输出流,服务端的Socket对象上的getOutputStream方法得到的输出流其实就是发送给客户端的数据。
浏览器–>服务器
request-请求
GET / HTTP/1.1\r\n -请求行
Host: 127.0.0.1:9999\r\n
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
Sec-Fetch-Site: none\r\n
Sec-Fetch-Mode: navigate\r\n
Sec-Fetch-User: ?1\r\n
Sec-Fetch-Dest: document\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
\r\n