Я кодирование немного веб-сервера Http на основе следующей модели:сеанс обработки в простом сервере HTTP
public class HttpServer {
public static void main(String[] args) throws Throwable {
ServerSocket ss = new ServerSocket(8080);
while (true) {
Socket s = ss.accept();
System.err.println("Client accepted");
new Thread(new SocketProcessor(s)).start();
}
}
private static class SocketProcessor implements Runnable {
private Socket s;
private InputStream is;
private OutputStream os;
private SocketProcessor(Socket s) throws Throwable {
this.s = s;
this.is = s.getInputStream();
this.os = s.getOutputStream();
}
public void run() {
try {
readInputHeaders();
writeResponse("<html><body><h1>Hello</h1></body></html>");
} catch (Throwable t) {
t.printStackTrace();
} finally {
try {
s.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
System.err.println("Client processing finished");
}
private void writeResponse(String s) throws Throwable {
String response = "HTTP/1.1 200 OK\r\n" +
"Server: YarServer/2009-09-09\r\n" +
"Content-Type: text/html\r\n" +
"Content-Length: " + s.length() + "\r\n" +
"Connection: close\r\n\r\n";
String result = response + s;
os.write(result.getBytes());
os.flush();
}
private void readInputHeaders() throws Throwable {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while(true) {
String s = br.readLine();
if(s == null || s.trim().length() == 0) {
break;
}
}
}
}
}
- Run сокета сервера на порт
x
- Do
accept
вwhile
- Если новый запрос появляется, обрабатывать запрос в новой резьбе
- Ждите другого запроса
Но как я могу реализовать сеанс? Есть ли какой-либо механизм для того, чтобы отличать один сеанс от другого? Как очистить сеанс после закрытия браузера? Как сохранить соединение открытым?
Подождите, я отправлю код – Tony
Какова основная идея внедрения собственного сервера? Чего вы пытаетесь достичь? – tmarwen
@tmarwen, опыт программирования. – Tony