【发布时间】:2011-02-05 22:11:43
【问题描述】:
我有一个非常基本的多线程 Web 服务器的启动,它可以接收所有 GET 请求,只要它们一次来一个。
但是,当多个 GET 请求同时进入时,有时它们都被接收到,而其他时候,一些请求丢失。
我通过创建一个带有多个指向我的网络服务器的图像标签的 html 页面并在 Firefox 中打开该页面来测试这一点。我总是使用 shift+refresh。
这是我的代码,我一定是做错了什么。
public final class WebServer
{
public static void main(String argv[]) throws Exception
{
int port = 6789;
ServerSocket serverSocket = null;
try
{
serverSocket = new ServerSocket(port);
}
catch(IOException e)
{
System.err.println("Could not listen on port: " + port);
System.exit(1);
}
while(true)
{
try
{
Socket clientSocket = serverSocket.accept();
new Thread(new ServerThread(clientSocket)).start();
}
catch(IOException e)
{
}
}
}
}
public class ServerThread implements Runnable
{
static Socket clientSocket = null;
public ServerThread(Socket clientSocket)
{
this.clientSocket = clientSocket;
}
public void run()
{
String headerline = null;
DataOutputStream out = null;
BufferedReader in = null;
int i;
try
{
out = new DataOutputStream(clientSocket.getOutputStream());
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
while((headerline = in.readLine()).length() != 0)
{
System.out.println(headerline);
}
}
catch(Exception e)
{
}
}
【问题讨论】:
-
您可以从真正关注您的异常开始,而不是忽略它们。他们在那里是有原因的;听他们说,你的答案很可能就在里面。
标签: java multithreading http sockets