Android 发送全4位的int整型数据到服务器困惑
来源:互联网 发布:阿里云机顶盒安装软件 编辑:程序博客网 时间:2024/06/11 21:52
在App开发中常使用json与服务器Socket请求和解析服务器返回的数据。
为了确保在网络传输过程中没有丢失数据,一般会在发送请求数据前先发送把数据的长度发送到服务器。但数据的长度是需要发送全4位整型数据到服务器。
举个例子:使用手机号码和验证码登录
发送请求body为:{"cmd":"login","username":"ceshi","code":"123456"}
则数据的长度为:50。
我们都知道,一个byte有8位。那么数据长度50的二进制呈现是:110010。
全4位整型二进制的呈现是:00110010 00000000 00000000 00000000。
OutputStream提供write(int v)的方法,可以将int整型数据写入输入流中。但是却做不到全4位整型写入,只会发送110010,也就是只会发送1位整型数据。
那么DateOutputStream的writeInt(int v)总可以了吧。
实际上还是不可以,因为是不会在110010补0的。
需要通过nio里面的ByteBuffer。它提供了allocate(int capacity)一个可以分配大小的字节数组。
通过ByteBuffer.order(ByteOrder bo)低位补0。
最后通过putInt在第1个字节的位置写入数据的长度。
以下是实例完整代码:
import java.io.*;import java.net.*;import java.nio.ByteBuffer;import java.nio.ByteOrder;public class TalkClient {public static void main(String args[]) {try {Socket socket = new Socket("120.24.60.164", 6010);// 由Socket对象得到输出流DataOutputStream os = new DataOutputStream(socket.getOutputStream());// 由Socket对象得到输入流,并构造相应的BufferedReader对象BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));String readline = "{\"cmd\":\"login\",\"username\":\"ceshi\",\"code\":\"123456\"}";byte[] dataBuf = readline.getBytes();int len = dataBuf.length;ByteBuffer dataLenBuf = ByteBuffer.allocate(4);dataLenBuf.order(ByteOrder.LITTLE_ENDIAN);dataLenBuf.putInt(0, len);ByteBuffer sendBuf = ByteBuffer.allocate(len + 4);sendBuf.order(ByteOrder.LITTLE_ENDIAN);sendBuf.put(dataLenBuf.array(), 0, 4);sendBuf.put(dataBuf, 0, len);// 向120.24.60.164的6010端口发出客户请求os.write(sendBuf.array(), 0, len + 4);// 刷新输出流,使Server马上收到该字符串os.flush();System.out.println("response:" + is.readLine());os.close(); // 关闭Socket输出流is.close(); // 关闭Socket输入流socket.close(); // 关闭Socket} catch (Exception e) {System.out.println("Error: " + e); // 出错,则打印出错信息}}}
1 0
- Android 发送全4位的int整型数据到服务器困惑
- Android 发送全4位的int整型数据到服务器
- android,post发送数据到服务器
- android, httpclient,get,发送数据到服务器
- android,HttpPost发送数据到服务器
- Android利用JSON发送数据到服务器
- Android利用JSON发送数据到服务器
- Android利用JSON发送数据到服务器
- 发送数据到服务器
- 返回整型数据的指针int *p
- android,get发送数据到服务器,服务器验证登陆
- 关于64位整型数据的问题
- 发送XML数据到服务器
- 发送JSON数据到服务器
- android发送json数据到服务器(框)
- Android以后台Service的方式获取GPS数据,并定时发送到服务器
- C语言中的整型字节序——int 到 char[4]的转换
- android 发送json 到服务器
- iOS POST和GET传值
- OC基础——copy语法(深拷贝和浅拷贝)
- AWK基础命令
- mysql命令(数据库备份与恢复)
- arm-linux-gcc 裸机程序开发(一)
- Android 发送全4位的int整型数据到服务器困惑
- 类方法(class method)
- Java编译和运行时类查找机制
- 利用ant脚本 自动构建svn增量/全量 系统程序升级包
- JSP学习
- arm-linux-gcc 裸机程序开发(二)
- Producer Example
- 提高 Linux 上 socket 性能
- arm-linux-gcc裸机程序开发(三)