Java自定义服务器,工作大多但随机失败

时间:2017-09-08 00:58:19

标签: java http server

所以我一直在努力了解有关网站和http请求等的更多信息,因此我一直在研究的项目是在纯java中设置我自己的服务器。在大多数情况下它已经取得了成功,我已经学到了很多东西并且运行良好,但似乎在它闲置一段时间后,它不再听取请求。这是适用的代码,处理请求的部分相对简单。我还摆脱了用于记录的println语句:

public class Server{
public static void main(String args[]){
    Socket clientSocket = null;
    ServerSocket server = null;
    try{
        server = new ServerSocket(5555);
    }//end of try
    catch(Exception e){
        System.out.println("Error setting up listener");
        e.printStackTrace();
        System.exit(0);
    }//end of catch
    while(true){
        try{
            clientSocket = server.accept();
            InputStreamReader isr = new InputStreamReader(clientSocket.getInputStream());
            BufferedReader reader = new BufferedReader(isr);
            new HandleRequest(reader.readLine(),clientSocket).start();
        }//end of try
        catch(Exception e){
            //send 500 error header and error message
        }//end of catch
    }//end of while
  }//end of main
}//end of Server class

HandleRequest是一个扩展Thread的类,它会找出要发送回客户端的内容并将其写回发送给它的套接字。但问题是,在某些情况下,在尝试连接时,server.accept()部分甚至都没有触发(尽管事情并非总是如此,一天晚上我启动了服务器,早上它仍然工作,但通常情况并非如此)。偶尔如果我尝试连接第二次,这将导致服务器处理两个请求,这对我来说有点奇怪。我在这里做错了吗?

编辑:我也意识到这只是阅读请求的第一行并且它只适用于GET请求的可怕做法。如上所述,它对我来说是一个学习项目,并不意味着用于任何重要的事情,尽管这可能是我接下来要尝试实施的。

1 个答案:

答案 0 :(得分:1)

客户端处理线程应该自己执行readLine()。目前,如果你有一个行为不端的客户,它将阻止接受线程。