【发布时间】:2015-08-10 10:37:46
【问题描述】:
例如,我们如何在android中以特定格式向服务器发送请求
[RequestID-1byte][sourceID-1byte][datalen-4byte][数据部分]
【问题讨论】:
标签: android client server messages
例如,我们如何在android中以特定格式向服务器发送请求
[RequestID-1byte][sourceID-1byte][datalen-4byte][数据部分]
【问题讨论】:
标签: android client server messages
我不确定,但我认为你可以用 Volley Library 做类似的事情:
StringRequest mStringRequest = new StringRequest(Request.Method.POST, URL_VALIDATE, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// code for response here
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// code for error response here
}
}) {
@Override
protected Map<String, Byte> getParams() {
Map<String, Byte> params = new HashMap<>();
// the POST parameters:
params.put("RequestID", byte1);
params.put("sourceID", byte2);
params.put("datalen", byte3);
return params;
}
};
Volley.newRequestQueue(this).add(mStringRequest);
希望对你有帮助!
【讨论】:
使用服务器-客户端套接字编程?
我正在编写示例代码。
public class Packet {
private byte requestID;
private byte sourceID;
private byte[] data;
public Packet(byte requestID, byte sourceID, byte[] data) {
this.requestID = requestID;
this.sourceID = sourceID;
// TODO: add exception handling for data length > 65535, data length more 4byte
this.data = data;
}
public byte[] getData() throws IOException{
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
byteStream.write(requestID);
byteStream.write(sourceID);
if(data.length<0xff) // if data length < 255, data byte is 2
byteStream.write(0);
byteStream.write((short)data.length);
byteStream.write(data);
byteStream.close();
return byteStream.toByteArray();
}
}
和套接字 I/O
Socket socket = new Socket(somehost, someport);
InputStream inStream = socket.getInputStream();
OutputStream outStream = socket.getOutputStream();
...
...
byte requestID = 1;
byte sourceID = 2;
byte data[] = ....
Packet packet = new Packet(requestID,sourceID,data);
outStream.write(packet.getData());
outStream.flush();
...
...
【讨论】: