簡體   English   中英

如何在Java中的服務器中偵聽和生成客戶端響應?

[英]How to listen and generate respones for client in server in java?

這是我的服務器端Java代碼,偵聽端口1880,並從瀏覽器/客戶端發出HTTP客戶端請求。本地主機中的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();
     }
    }

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

因此,當您運行該程序時,它將開始在端口1880進行監聽。當擊中URL http:// localhost:1880 /時 ,它將被處理程序MyHandler攔截。 響應將被寫入OutputStream,它將把請求發送回客戶端。

我看到的問題之一是您在打印一些語句后停止服務器,而您引用的示例卻沒有這樣做。 可能是,刪除server.stop(60)語句並檢查問題是否仍然存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM