android socket客户端应用memo
来源:互联网 发布:淘宝宝贝保护不被删除 编辑:程序博客网 时间:2024/06/07 00:00
1 socket双向收发
发送因为不用阻塞,不用另开线程
接收线程
private class ReceiveThread extends Thread { private InputStream inStream = null; private byte[] buf; private byte[] data; ReceiveThread(Socket s) { try { this.inStream = s.getInputStream(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void run() { while(!stop) { buf = new byte[1024]; try { //读取输入数据(阻塞) int dataSize = this.inStream.read(buf); if (dataSize > 0) { data = ByteUtil.subBytes(buf, 0, dataSize); Log.v("leo", "read data(" + data.length + "):" + ByteUtil.byte2hex(data)); Message msg = new Message(); msg.what = MSG_DATARECEIVED; msg.obj = this.data; //发送消息 mHandler.sendMessage(msg); } } catch (IOException e) { //socket断开 // TODO Auto-generated catch block e.printStackTrace(); clientSocket = null; Message msg = new Message(); msg.what = MSG_SOCKETFAIL; //发送消息 mHandler.sendMessage(msg); return; } } }}
2 通信协议
JavaStruct是处理协议格式的好工具,相当于在java中实现结构体,这样不用费劲拆装字节,定义好struct后,用pack和unpack就自动完成了。
// 包体LoginRequestBody body = new LoginRequestBody();deviceID = "1";String privateKey = "D8A2D5E2C1C6A5B800";System.arraycopy(deviceID.getBytes(), 0, body.deviceID, 0,deviceID.length());System.arraycopy(privateKey.getBytes(), 0, body.privateKey, 0,privateKey.length());body.lng = lng;body.lat = lat;body.v = 0;body.direction = -1;// 登录请求包LoginRequestPackage pkg = new LoginRequestPackage();pkg.bodyLength = body.getSize();pkg.body = body;byte[] bytes = null;try {bytes = JavaStruct.pack(pkg);} catch (StructException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}Log.v("leo", "login(" + bytes.length + "):" + ByteUtil.byte2hex(bytes));try {// 获得Socket的输出流OutputStream outStream = s.getOutputStream();// 发送数据outStream.write(bytes);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
不过使用中发现javastruct定义的结构体之间好像不能继承,略有不爽
3 心跳包
用Repeating的Alarm,发Broadcast,在Receiver中发送心跳包
0 0
- android socket客户端应用memo
- Android 客户端socket通讯
- 【Android】Socket客户端
- Android 客户端Socket
- android socket 客户端 服务器端
- Android ndk socket客户端
- android socket 客户端实例
- android socket客户端app
- Android 创建socket客户端
- Android开发入门【memo】
- Android源代码下载--Memo
- memo---Android tools
- android memo--keystore
- Android Socket开发(客户端版)
- Android-socket-client 客户端实现
- Android-socket-client客户端<2>
- Android客户端实现Socket通信
- Android-Socket多线程应用(聊天室客户端、Handler的简单使用)
- servlet 实现下载文件
- web api csrf
- SQL server 2008 安装(win7版)
- Lotus Domino程序常见错误中文解释
- 时间的本质
- android socket客户端应用memo
- Android 一些错误
- CSS二级菜单+Javascript
- 使用Python的Swampy程序包中的“乌龟”画图及有意思的习题
- Java将指定文件/文件夹压缩成zip、rar压缩文件
- android中多次调用PendingIntent.getBroadcast(),intent数据不更新问题
- Magento 对csv表格的导入功能 高级自定义部分!
- 忘记oracle的sys用户密码怎么修改
- Windows 开机时间