2013-02-25 2 views
0

Привет всем !!!!!!!!!! мой прокси-сервер/сервер получает запросы от клиента в таком виде:Java: установить неблокирующее чтение из подключенного сокета

GET mhttp://proxy_ip:proxy_port/file.mhtml\n 
\n 

и вот мой код:

import java.io.*; 
import java.net.Socket; 
import java.net.ServerSocket; 
import java.net.InetAddress; 
import java.net.UnknownHostException; 

public class ProxyMain { 

public static void main(String argv[]) { 

    int proxyPort = 55554; 
    String proxyAddr = "127.0.0.1"; 
    ServerSocket proxySocket = null; 

    try { 
     proxySocket = new ServerSocket(proxyPort, 50, InetAddress.getByName("127.0.0.1")); 
    } 

    catch (Exception e) { 
     System.err.println("Impossible to create socket server!"); 
     System.out.flush(); 
     System.exit(1); 
    } 

    System.out.printf("Server active on port: %d and on address %s\n", proxyPort, proxySocket.getInetAddress()); 

    while (true) { 
     Socket client = null; 
     BufferedReader in = null; 
     PrintWriter out = null; 
     String request = new String(); 
     String tmp = new String(); 


     try { 
      client = proxySocket.accept(); 
      System.out.println("Connected to: "); 
      System.out.println(client.getInetAddress().toString()); 
      System.out.printf("On port %d\n", client.getPort()); 
      in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
      out = new PrintWriter(client.getOutputStream(), true); 

     } 

     /*catch (IOException e) { 
      System.err.println("Couldn't get I/O for connection accepted"); 
      System.exit(1); 
     }*/ 

     catch (Exception e) { 
      System.out.println("Error occurred!"); 
      System.exit(1); 
     } 

     System.out.println("Received request:"); 

     try{ 
      ##################################### 
          while ((tmp = in.readLine()) != null) 
      System.out.println(tmp); 
      request = request + tmp; 
          ##################################### 
     } 
     catch (IOException ioe) { 
      System.err.println("Impossible to read mhttp request!"); 
      System.exit(1); 
     } 

     System.out.println(request); 
    } 

} 

} 

У меня есть проблема в блоке разделителями с ######### , Я не знаю, как остановить метод in.readLine(). Сначала он читает: GET mhttp: // proxy_ip: proxy_port/file.mhtml \ n , тогда он читает \ n , но затем он блокирует, все еще ждет, чтобы прочитать, но запрос завершен. Я думаю, что клиент поддерживает соединение, даже после отправки запроса, но я не могу изменить это, потому что это программное обеспечение моего учителя. Как я могу это решить?

+1

Посмотрите: http://docs.oracle.com/javase/1.4.2/docs/api/java/io/BufferedInputStream.html#available%28%29 –

+1

Почему вы читаете в цикле, если вы знаете, что вам когда-нибудь понадобится прочитать строки '2'? Просто выполните 2 'readLine()' звонки ...? –

+0

Я думал, что было бы лучше выполнить общий прокси-сервер purpouse ... чтобы принять любой запрос – user1576208

ответ

1

не читайте целую строку, читайте один байт, пока не встретите '\n' или не произведите 2 чтения, как предлагает Грег. в любом случае, так как вы знаете точный формат входящего сообщения, отредактируйте свой код для чтения соответствующим образом.

Смежные вопросы