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