자바

2017-11-23 17 views
0
나는 현재 프록시 서버에서하고 있어요

에서 ServerSocket의로 패스 '호스트 매개 변수'(핵심이 여기 https://resources.oreilly.com/examples/9781565923713/blob/master/SimpleProxyServer.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 []), 헤더의 "호스트"를 가져올 수 있었다이다 .

그러나 SimpleProxyServer.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.", ""); 
      } 
     } 

오른쪽과 같은 것에 대해 이야기하고는 "이 다른 소켓에 매개 변수를 전달하는 방법에 대한 방법 또는 방법 프록시를 만드는 것입니다 클라이언트에서 요청 매개 변수를 사용하여 Socket을 시작하는 서버? "

답변

0

누군가가 궁금해지면 클라이언트의 명령을 수신하는 다른 소형 소켓 서버를 만들고 런타임을 통해 프로세스 (java -jar ProxyServer.jar <...>)를 시작하기로 결정했습니다. 또한 필요한 경우이 프로세스를 종료합니다.

기본적으로 클라이언트는 두 가지 요청을 보내야합니다. 하나는 프록시 서버를 설정하고 다른 하나는 프록시 서버에 연결하는 것입니다.

나는 더 나은 해결책이있을 것이라고 확신하지만, 이것은 나에게 어울립니다.