2016-07-18 58 views
0

這是我的服務器端代碼在Java監聽1880端口,並從瀏覽器/ client.java代碼在本地主機,它給連接拒絕error.I複製該服務器代碼從網頁。我不知道這是什麼代碼在做。如何在java中監聽和生成服務器端的客戶端響應?

import com.sun.net.httpserver.HttpExchange; 
import com.sun.net.httpserver.HttpHandler; 
import com.sun.net.httpserver.HttpServer; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.InetSocketAddress; 
import java.net.ServerSocket; 
import java.net.Socket; 
public class ServerHandlingHttpRequest { 
    public void start() throws IOException 
    { 
       InetSocketAddress addr=new InetSocketAddress(1880); 
       System.out.println(addr.getPort()); 
       System.out.println(addr.getAddress()); 
       System.out.println(addr.getHostName()); 
       System.out.println(addr.toString()); 

       HttpServer server=HttpServer.create(addr,0); 
       server.createContext("/", new MyHandler()); 
       server.setExecutor(null); 
       server.start(); 
       System.out.println("Server Listening"); 
       System.out.println(server.getAddress()); 
       server.stop(60); 
     } 
     class MyHandler implements HttpHandler { 
    public void handle(HttpExchange t) throws IOException { 
     System.out.println("Request Arrived"); 
     String response = "This is the response"; 
     t.sendResponseHeaders(200, response.length()); 
     OutputStream os = t.getResponseBody(); 
     os.write(response.getBytes()); 
     os.close(); 
    } 
} 
     public static void main(String[] args) throws IOException 
    { 
      ServerHandlingHttpRequest w=new ServerHandlingHttpRequest(); 
      w.start(); 
    } 
    } 
+0

你想用這個做什麼? – aksappy

+0

我想在端口1880上監聽客戶端請求並生成對該請求的響應。 – Badman

+0

http://www.java2s.com/Tutorial/Java/0320__Network/LightweightHTTPServer.htm這是我從哪裏複製和修改服務器端代碼的鏈接。 – Badman

回答

0

該代碼只是開始監聽您指定的端口作爲HTTP偵聽器。這意味着,任何可能進入該端口的HTTP請求都將被您的程序攔截。當它攔截時,它會查找已配置爲處理對請求的響應的上下文路徑。

所以,當你運行這個程序時,它開始在端口1880監聽。當一個URL http://localhost:1880/被命中時,它將被處理器MyHandler攔截。響應將被寫入OutputStream,它將把請求發送回客戶端。

我看到的其中一個問題是打印某些語句後停止服務器,而您提到的示例沒有這樣做。可能是,刪除server.stop(60)聲明並檢查問題是否仍然存在。

+0

是的刪除server.stop(60)後,它的工作原理,但我想停止服務器60秒後收聽。 – Badman

+0

這段代碼究竟意味着什麼:InetSocketAddress addr = new InetSocketAddress(1880)?我知道在客戶端應該有兩個用於通信的端點(套接字地址=客戶端IP地址+客戶端端口)和其他服務器(套接字地址=服務器IP地址+服務器端口)。哪一個套接字地址由InetSocketAddress生成? – Badman