Java 使用套接字从HTTP Post接收数据
我的要求是在android中使用套接字接收HTTP Post请求(内容是JSON文件)。当我打印socket.getInputStream()时,我得到: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/
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));