首先理解,两台机器连接需要用的的方式:Socket(套接字)。
socket中连个方法,getInputStream和getOutputString ,分别是接收请求和返回。
Socket socket = new Socket("127.0.0.1", "8080");
OutputStream os = socket.getOutputStream();
boolean autoflush = true;
PrintWriter out = new PrintWriter( socket.getOutputStream(), autoflush);
// send an HTTP request to the web server
out.println("GET /index.jsp HTTP/1.1");
out.println("Host: localhost:8080");
out.println("Connection: Close");
out.println(); // read the response
boolean loop = true;
BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputstream() ));
StringBuffer sb = new StringBuffer(8096);
while (loop) {
if ( in.ready() ) {
int i=0;
while (i!=-1) {
i = in.read();
sb.append((char) i);
}
loop = false;
}
Thread.currentThread().sleep(50);
}
ServerSocket和Socket不同,服务器套接字的角色是等待来自客户端的连接请求。一旦服务器套接字获得一个连接请求,它创建一个Socket实例来与客户端进行通信。
new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1"));
ServerSocket有一个方法监听8080端口,ServerSocket.accept(),返回值是Socket。
HttpServer里的await()方法就是持续监听8080接收的http请求,他其实实现的就是ServerSocket的serverSocket.accept();方法。然后通过while循环实现持续监听。
简单来说:HttpServer里await()方法通过while循环调用HttpServer的accept()方法,当有http请求时,accept()方法返回一个Socket,然后将Socket解析成Request,Request request = new Request(Socket.getInputStream()); 下面是HttpServer的await()方法。这里注意,只有accept()返回值时才会继续往下执行。