什么是serversockt接受的第三个请求?

时间:2016-05-03 05:48:25

标签: java java-websocket

我从第一个例子中学习了代码。

这是index.html

<html>
  <head>
    <title>Welcome to BrainySoftware</title>
  </head>
  <body>
    <img src="./images/logo.gif">
    <br>
    Welcome to BrainySoftware.
  </body>
</html>

我知道会有2个GET请求。首先是html,第二个是img。 但我有时会收到第三个请求。第三个请求是空的,我从请求中得不到任何结果。

ServerSocket serverSocket = null;
int port = 8080;
try {
  serverSocket =  new ServerSocket(port, 1,    InetAddress.getByName("127.0.0.1"));
}
catch (IOException e) {
  e.printStackTrace();
  System.exit(1);
}
while (!shutdown) {
      Socket socket = null;
      InputStream input = null;
      OutputStream output = null;
      try {
        socket = serverSocket.accept();
        input = socket.getInputStream();
        output = socket.getOutputStream();

        // create Request object and parse
        Request request = new Request(input);
        request.parse();

        // create Response object
        Response response = new Response(output);
        response.setRequest(request);
        response.sendStaticResource();

        // Close the socket
        socket.close();

        //check if the previous URI is a shutdown command
        shutdown = request.getUri().equals(SHUTDOWN_COMMAND);
      }
      catch (Exception e) {
        e.printStackTrace();
        continue;
      }
    }

当第三个请求到来时,方法sendStaticResource会抛出异常:
java.lang.NullPointerException because request.getUri() is null. 我的jdk版本是1.7,当我将InetAddress从127.0.0.1更改为192.168.50.132时,第三个请求消失了。 我不知道为什么不2请求,请帮助我。

1 个答案:

答案 0 :(得分:1)

如果您接受来自世界的连接,那么无法您可以将连接浏览器归咎于“有错误”。即使它有:你 负责处理从外部收到的数据。处理这些请求时可能会抛出异常,但您最好捕获并处理它们。如果有的话,你的代码必须处理被抛出的任何

您发布的代码似乎是这样做的 - 但由于它过于简单化,它不能优雅地处理任何不可预见的结果。相反,它只是爆炸堆栈痕迹 - 给人的印象是出现了可怕的错误。我知道你不打算为HTTP实现另一个处理程序 - 这将是一个很好的领域 - 但是有兴趣测试这些概念。

回到实际导致这些请求的内容:从远处开始很难说,不执行此代码并在此处执行所有操作。正如我在评论中所说,您应该在调试器中检查可疑请求及其随附的数据。请记住,乍一看HTTP似乎非常简单,但是规范包含了很多细节,你在这个非常简单的连接处理程序中完全省略了 - 连接 - keep-alive出现在我的脑海中:一个物理连接可以携带多个虚拟连接(读取:HTTP请求)。