2013-07-03 40 views
-1

听起来很奇怪,但是这种方法适用于获取/大部分POST请求,但有时(通常最近)StringBuffer不会捕获附加在http末尾的数据请求(JSON)。我哪里错了?如何解决这个方法不会丢失JSON字符串

/** 
    * Parses a client request and calls the appropriate handler 
    * @throws Exception 
    */ 
    private void processClientRequest() throws Exception{ 

     //Get the client request 
     BufferedReader clientRequest = new BufferedReader(new InputStreamReader(connectedClient.getInputStream())); 

     //Start response object 
     DataOutputStream responseToClient = new DataOutputStream(connectedClient.getOutputStream()); 

     System.out.println(clientRequest); 
     String requestString = clientRequest.readLine(); 

     String header = requestString; 

     //Break up request 
     StringTokenizer tokenizer = new StringTokenizer(header); 

     //Different request parts 
     String httpMethod = tokenizer.nextToken(); 
     String httpQueryString = tokenizer.nextToken(); 

     //Print client request 
     StringBuffer responseBuffer = new StringBuffer(); 
     while (clientRequest.ready()) { 
      responseBuffer.append(requestString + " "); 
      System.out.println(requestString); 

      requestString = clientRequest.readLine(); 
     } 

     //Process GET request 
     if (httpMethod.equals("GET")) { 
      processGETRequests(httpQueryString, requestString); 


     }else if (httpMethod.equals("POST")) { 
      processPOSTRequests(responseBuffer, httpQueryString); 
     } 
    } 

回答

1

请仔细阅读ready()的文档。

我觉得你的问题是:

while (clientRequest.ready()) { 

如果流没有数据,但(如果客户端发送比你的服务器处理速度较慢),那么你是不是等待客户端发送。

相关问题