Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用套接字从HTTP Post接收数据_Java_Android_Http_Sockets - Fatal编程技术网

Java 使用套接字从HTTP Post接收数据

Java 使用套接字从HTTP Post接收数据,java,android,http,sockets,Java,Android,Http,Sockets,我的要求是在android中使用套接字接收HTTP Post请求(内容是JSON文件)。当我打印socket.getInputStream()时,我得到: POST/HTTP/1.1 内容长度:41 内容类型:application/json 主持人:10.0.2.15:5001 连接:保持活力 用户代理:Apache HTTPClient/Unavailable(Java 1.4) CRLF(车厢返回线进给)- JSON的实际内容 我使用了链接,但它只打印“内容类型:application/

我的要求是在android中使用套接字接收HTTP Post请求(内容是JSON文件)。当我打印socket.getInputStream()时,我得到:

POST/HTTP/1.1
内容长度:41
内容类型:application/json
主持人:10.0.2.15:5001
连接:保持活力
用户代理:Apache HTTPClient/Unavailable(Java 1.4)
CRLF(车厢返回线进给)-
JSON的实际内容
我使用了链接,但它只打印“内容类型:application/json” 主机:Logcat中的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);
serverSocket=新的serverSocket(端口号);
虽然(正确){
socket=serverSocket.accept();
列表标题=新建ArrayList();
字符串str;
BufferedReader=新的BufferedReader(新的InputStreamReader(socket.getInputStream());
而((str=reader.readLine())!=null)
{
添加(str);
if(str.startsWith(“内容长度:”)
{
断开;//不要接下一行!
}
}
int contentLength=Integer.parseInt(headers.get(headers.size()-1).substring(“内容长度:”.Length());
对于(int j=0;j

更多参考资料

Ya我编辑了问题@waqasw您为什么使用套接字而不是http库?请告诉我此方案是否可行(因为我的要求是实现此方案).我还需要一些关于使用哪个HTTP库的指导?它会很轻吗@artbristol@user1741274看看这个问题的答案@Arvin在我提供的链接中似乎有一些(我从未亲自使用过)
    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);
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));