2016-07-18 10 views
0

これはjavaのサーバーサイドコードで、ポート1880でリッスンし、http:// localhost内のhttp:// client.javaコードから接続要求を拒否しました。エラーが発生しました。このサーバーコードをWebページからコピーしました。コードが実行されています。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でリスニングを開始します。http://localhost:1880/というURLがヒットすると、ハンドラMyHandlerによってインターセプトされます。応答はOutputStreamに書き込まれ、要求がクライアントに返送されます。

私が見ている問題の1つは、いくつかのステートメントを印刷した後にサーバーを停止していることです。可能であれば、server.stop(60)ステートメントを削除し、それでも問題が解決するかどうかを確認してください。

+0

はい、server.stop(60)を削除した後に動作しますが、60秒後にリッスンするようにサーバーを停止します。 – Badman

+0

InetSocketAddress addr = new InetSocketAddress(1880)?私は、クライアント側(ソケットアドレス=クライアントIPアドレス+クライアントポート)とサーバ(ソケットアドレス)の2つのエンドポイントが必要であることを知っています。 =サーバーIPアドレス+サーバーポート)。どちらのソケットアドレスがInetSocketAddressによって生成されますか? – Badman

関連する問題