2013-04-08 108 views
0

我想写一个简单的Java程序使用ServerSockets,将发送一些HTML代码到浏览器。这里是我的代码:Java服务器:套接字发送HTML代码到浏览器

 ServerSocket serverSocket = null; 
     try { 
      serverSocket = new ServerSocket(55555); 
      } catch (IOException e) 
      { 
      System.err.println("Could not listen on port: 55555."); 
      System.exit(1); 
     } 

     Socket clientSocket = null; 
     try { 
      clientSocket = serverSocket.accept(); 

      if(clientSocket != null)     
       System.out.println("Connected"); 

     } catch (IOException e) { 
      System.err.println("Accept failed."); 
      System.exit(1); 
     } 

    PrintWriter out = new PrintWriter(clientSocket.getOutputStream()); 


    out.println("HTTP/1.1 200 OK"); 
    out.println("Content-Type: text/html"); 
    out.println("\r\n"); 
    out.println("<p> Hello world </p>"); 
    out.flush(); 

    out.close(); 

    clientSocket.close(); 
    serverSocket.close(); 

然后我在我的浏览器中去localhost:55555,什么也没有显示。我知道连接正在工作,因为程序在if语句中输出“已连接”。我也尝试从inputStream输出数据,并且工作。但我试图在浏览器中输出的文本根本没有显示,程序运行完毕,并且在浏览器中出现“问题加载页面 - 连接已重置”,但没有显示文本。

我已经搜索了互联网,似乎每个人都用这种方式编码,他们的文本显示正常,他们有其他问题。 我该如何解决这个问题?

+0

你考什么浏览器?此代码为我在Chrome和Firefox中工作 – fmodos 2013-04-08 21:33:39

+0

我在Firefox中测试 – ALR 2013-04-08 21:37:40

+0

在Chrome中,我甚至没有从inputStream获得任何结果 – ALR 2013-04-08 21:39:44

回答

3

我在Chrome,Firefox,IE和Opera上测试了你的代码,它工作正常。

但是,我建议你使用多线程,并且基本上产生一个新的线程来处理每个新的请求。

您可以创建一个实现runnable并在构造函数中接受clientSocket的类。这基本上会使您的自定义Web服务器能够同时接受多个请求。

如果您想要处理多个总请求,您还需要一个while循环。

一个良好的阅读展示上述:http://www.prasannatech.net/2008/10/simple-http-server-java.html

享受!

+0

感谢您的建议。 – ALR 2013-04-08 22:11:36

+0

我已将Chrome和Firefox与防火墙关闭。它已经工作了大约15次,这是在铬。我不明白发生了什么问题。 – ALR 2013-04-08 22:12:16

+0

尝试在所有代码中添加一段时间(true)。也许你的应用程序正在关闭,因为有多个请求正在进行。 – 2013-04-08 22:17:02

1
  1. 在HTTP线路终端是\r\n.这意味着,你不应该使用println(),你应该使用print()和自己添加一个明确\r\n到每一行。

  2. HTTP GET的结果应该是HTML文档,而不是片段。浏览者有权忽略或投诉。发送:

    <html> 
    <head/> 
    <body> 
    <p> Hello world </p> 
    </body> 
    </html> 
    
0

您需要需要设置的PrintWriter它打印时自动刷新。

PrintWriter out = new PrintWriter(clientSocket.getOutputStream());

应该

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

相关问题