【问题标题】:Client Server Communication Android客户端服务器通信Android
【发布时间】:2015-08-10 10:37:46
【问题描述】:

例如,我们如何在android中以特定格式向服务器发送请求

[RequestID-1byte][sourceID-1byte][datalen-4byte][数据部分]

【问题讨论】:

    标签: android client server messages


    【解决方案1】:

    我不确定,但我认为你可以用 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);
    

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      使用服务器-客户端套接字编程?

      我正在编写示例代码。

      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();
      ...
      ...
      

      【讨论】:

        猜你喜欢
        • 2011-07-06
        • 1970-01-01
        • 2016-05-05
        • 2013-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多