1

私の要件は、AndroidでSocketを使用してHTTP Postリクエストを受信することです(コンテンツはJSONファイルです)。socket.getInputStream()を出力すると、次のようになります。

POST/HTTP/1.1
Content length:41
Content-type: application/json
Host:10.0.2.15:5001
Connection: Keep Alive
User-Agent: Apache HTTPClient/Unavailable(Java 1.4)

CRLF(Carriage return line feed)-  

Actual Contents of JSON<Data>

リンクhttps://forums.oracle.com/forums/thread.jspa?messageID=7076709を使用しましたが、Logcatでは「Content-type:application / json Host:10.0」(長さ41の場合があります)のみが出力されます。 。

私のコードは次のとおりです。

    serverSocket = new ServerSocket(portNumber);
    while(true){ 
    socket = serverSocket.accept();
    List<String> headers = new ArrayList<String>();
    String str;
    BufferedReader reader = new BufferedReader(new  InputStreamReader(socket.getInputStream()));
    while ((str = reader.readLine()) != null)
    {
    headers.add(str);
    if (str.startsWith("Content-Length: "))
    {
    break; // and don't get the next line!
    }
    }
    int contentLength = Integer.parseInt(headers.get(headers.size() - 1).substring("Content-Length: ".length()));

   for(int j=0;j<headers.size();j++)
   {
    Log.d("Headers:",headers.get(j));
    }
    StringBuilder requestContent = new StringBuilder();
    int ch;
    for (int i = 0; i < contentLength; i++)
    {
    requestContent.append((char) reader.read());
    }
    Log.d("The request content is: ",""+requestContent);

これは私の出力です:ヘッダー:POST / HTTP / 1.1コンテンツ-長さ:41

requestContent:Content-Type:application / jsonホスト:10。

誰かがそれをどのように行うことができるか私に教えてもらえますか?前もって感謝します!

4

1 に答える 1

2
DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
conn.bind(serverSocket.accept(), new BasicHttpParams());
HttpRequest request = conn.receiveRequestHeader();
conn.receiveRequestEntity((HttpEntityEnclosingRequest)request);
HttpEntity entity = ((HttpEntityEnclosingRequest)request).getEntity();
System.out.println(EntityUtils.toString(entity));

詳細については、 http://hc.apache.org/httpcomponents-core-ga/tutorial/pdf/httpcore-tutorial.pdfを参照してください。

于 2012-10-26T11:37:44.427 に答える