2017-11-23 7 views
0

でのServerSocketに渡す「ホストパラメータに」(コアがここhttps://resources.oreilly.com/examples/9781565923713/blob/master/SimpleProxyServer.javaから取られた)javaの

しかし、私はクライアントから直接ホストを渡したいときに、この例では、起動パラメータを使用しています。パラメータおよびサーバーに渡し:

クライアントはその

final HttpURLConnection conn = (HttpURLConnection) new URL("http://www.google.com") 
        .openConnection(
          new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 7901))); 
conn.connect(); 
System.out.println(conn.getResponseCode()); 

私の最初のアイデアのようなHTTP接続は、クライアントの要求を読んで、それを文字列として保存する(またはbyty [])、ヘッダの「ホスト」をフェッチすることだったです。

しかし、SimpleContxyServer.javaは、サーバーにデータを送信するスレッドでwhile((bytes_read = from_client.read(request)) != -1)を使用し、このtスレッドが開始される前にInputSreamを読み取ってホストを取得すると、コードがハングします。

私は接続 try { server = new Socket(host, remoteport); }

の作成質問は前にこの

InputStreamReader from_client_reader = new InputStreamReader(client.getInputStream()); 
     BufferedReader reader = new BufferedReader(from_client_reader); 
     String line = reader.readLine(); 

     while (!line.isEmpty()) { 
      line = reader.readLine(); 
      if (line.contains("Host: ")) { 
       host = line.substring(line.indexOf("Host: ") + 6, 
         line.length()).trim().replace("www.", ""); 
      } 
     } 

のようなものを右話してい

:「ソケットにパラメータを渡す方法についての他の方法はありますかプロキシを作成する方法クライアントからの要求パラメータを使用してソケットを起動するサーバー?

答えて

0

誰かが驚くようなことがあった場合は、クライアントからのコマンドを待ち受ける別の小さなソケットサーバーを作成し、実行時にプロセス(java -jar ProxyServer.jar <...>)を起動することにしました。また、必要に応じてこのプロセスを終了します。

基本的に、クライアントは2つの要求を送信する必要があります.1つはプロキシサーバーを設定し、もう1つはプロキシサーバーに接続することです。

私はこれには良い解決策があると確信していますが、これは私に合っています。

関連する問題