我正在尝试实现仅提供静态页面的Web服务器。 这是我的超迷你网络服务器的代码。
import java.io.*;
import java.net.*;
class MyWebServer{
static ServerSocket serSocket = null ;
static{
try {
serSocket = new ServerSocket(80) ;
System.out.println("Server started successfully....\n\n") ;
} catch (IOException io) {
System.out.println( io.getMessage() );
System.exit(1) ;
}
}
public static void main(String []args){
while(true){
try {
new Thread( new ServingThread( serSocket.accept() ) ).start() ;
} catch (IOException io) {
System.out.println(io.getMessage());
}
}
}
}
class ServingThread implements Runnable{
private Socket socket ;
public ServingThread(Socket socket){
this.socket = socket ;
System.out.println("Receives a new browser request from " + socket);
}
public void run() {
BufferedReader in = null ;
PrintWriter out = null ;
try {
//reading request headers from browser starts here
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = ".";
while (!str.equals("")){
str = in.readLine();
//System.out.println(str);
}
System.out.println("\n\n");
//reading request headers from browser ends here
//writing output on outputstream starts here
out = new PrintWriter( socket.getOutputStream(), true ) ;
int i = (int) ( Math.random() * 10) ;
out.println(i) ;
System.out.println(i) ;
//writing output on outputstream ends here
socket.close() ;
System.out.println("Request successfully fulfilled.\n") ;
}
catch (IOException io) {
System.out.println(io.getMessage());
}
}
}
一切正常,但有时(并非总是)
我搜索了很多内容,但没有得到满意的答案。
非常感谢任何想法/解释。 :)
答案 0 :(得分:1)
首先,我假设你这样做是为了练习套接字/ http /等等...因为如果你真的试图实现一个Web服务器,您应该认真考虑使用现有的或者至少查看其来源 - 即使是最简单的HTTP服务器实现也会涉及很多内容。
那就是说,你的“服务器”:-)没有正确实现HTTP(没有返回状态代码,因此)浏览器的行为在这里确实未确定 - 它可能会尝试重试相同的请求多次或不是。缓存问题也可能在这里发挥作用 - 一旦实现HTTP,如果您不希望“新标签”重复请求,则需要发送适当的缓存标头。