HTTP server
Java ServerSocket
Blocking vs Non-Blocking
Readable
InputStreamReader
CharBuffer
Writer
OutputStreamWriter
package http_server;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.CharBuffer;
public class App {
int port = 8080;
public static void main(String[] args) throws IOException {
App app = new App();
app.run();
}
/*
* java์์๋ Server์ฉ์ผ๋ก ServerSocket์ด๋ผ๋ ํด๋์ค๋ฅผ ๋ณ๋๋ก ์ฌ์ฉํ๋ค.
* Socket์ ์์ํ ๊ฒ์ด ์๋๋ผ๋ ์ ์ ์ ์
*/
private void run() throws IOException {
// 1. Listen
ServerSocket listener= new ServerSocket(8080, 0); // port, backlog count
System.out.println("Listen!");
// 2. Accept
/*
* I/O์์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ Blocking์ด๋ผ๊ณ ํ๋ค. ํ์ผ ์ฝ๊ธฐ, ์ฐ๊ธฐ ๋ฑ๋ ๋ชจ๋ Blocking์ด์ง๋ง,
* TCPํต์ ์์ ๋คํธ์ํฌ ์ํ ์์ธ์ ๋ฐ๋ผ ์ง์ฐ๋ ์ ์๊ณ , ์๋๋ฐฉ์ ์์ฒญ์ด ์๋ค๋ฉด ๋์์ด ๊ธฐ๋ค๋ฆด ์ ์๋ค.
* ๋๋ฌธ์ ๋ฉํฐ์ค๋ ๋๋, ๋น๋๊ธฐ, ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฒ๋ฆฌ ๋ฑ์ด ํ์ํ๋ค.
*/
while(true) {
Socket socket = listener.accept();
System.out.println("Accept!");
// 3. Request
Readable reader = new java.io.InputStreamReader(socket.getInputStream());
CharBuffer charBuffer = CharBuffer.allocate(1_000_000);
reader.read(charBuffer);
charBuffer.flip();
System.out.println(charBuffer.toString());
// 4. Response
String body = "Hello world!";
byte[] bytes = body.getBytes();
String message = ""
+ "HTTP/1.1 200 OK\n"
+ "Content-type: text/html; charset=UTF-8\n"
+ "Content-Length: " + bytes.length + "\n\n" + body;
Writer writer = new OutputStreamWriter(socket.getOutputStream());
writer.write(message);
writer.flush();
// 5. close
socket.close();
}
}
}
Last updated