Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java自定义服务器,大部分工作正常,但随机失败_Java_Http_Server - Fatal编程技术网

Java自定义服务器,大部分工作正常,但随机失败

Java自定义服务器,大部分工作正常,但随机失败,java,http,server,Java,Http,Server,所以我一直在努力学习更多关于网站和http请求等的知识,所以我一直在做的一个项目就是用纯java设置我自己的服务器。在大多数情况下,它都是成功的,我学到了很多东西,而且它工作得很好,但似乎在它闲置一段时间后,它不再听取请求了。这是适用的代码,处理请求的部分相对简单。我还去掉了用于日志记录的println语句: public class Server{ public static void main(String args[]){ Socket clientSocket = null;

所以我一直在努力学习更多关于网站和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
HandlerRequest是一个扩展线程的类,它确定要发送回客户机的内容,并将其写回发送给客户机的套接字。但问题是,在某些情况下,当尝试连接时,server.accept()部分甚至不会启动(虽然情况并非总是如此,但有一天晚上我启动了服务器,第二天早上它仍然工作,但通常情况并非如此)。偶尔,如果我再次尝试连接,这将导致服务器处理这两个请求,这对我来说有点奇怪。我有什么地方做错了吗


编辑:我也知道,这是一种糟糕的做法,只读取请求的第一行,而且它只适用于GET请求。如前所述,这对我来说是一个学习项目,不打算用于任何重要的事情,尽管这可能是我下一步尝试实现的事情。

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

哦,这实际上很有道理,我会试试看。知道什么会导致客户“行为不端”?bug或恶意参与者。例如,连接但不发送任何内容。常见的拒绝服务攻击。