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

标签 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 请求。如前所述,这对我来说是一个学习项目,并不意味着用于任何重要的事情,尽管这可能是我下一步尝试实现的东西。

最佳答案

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

关于Java 自定义服务器,大部分工作但随机失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46107110/

相关文章:

http - 使用 Nginx/Lua 检测 HTTP 基本用户/密码 header 并将其重写为自定义 header

asp.net - 为什么某些浏览器会两次请求我的 ASP.Net 网站上的所有页面?

javascript - 如何使用 Javascript 设置授权 HTTP header

java - Yodlee 示例应用卡在 "Checking Cobrand Login Configurations";无法登录

java - 如何在 JasperReports 中将字段从父列表传递到子列表?

Java:如何实现一个接受 2 个数组并返回 2 个数组的方法?

java - spring中如何将JSON请求转换为特定格式的列表?

c - 在套接字编程中消息未从服务器发送到客户端

python-2.7 - 无法收听错误 : Couldn't listen on any:9008: [Errno 98] Address already in use

使用 switch case 的 Java 计算器