即使nio用的非常出色也不影响掌握这个SocketClient类库,学习这玩意儿,多多益善嘛!更何况百度人脸识别SDK也在用,附件带上库文件。
首先贴上GitHub下载链接:点击打开链接
https://github.com/vilyever/AndroidSocketClient
首先下载下来并解压,这里着重提醒一下:一定不要下载GitHub上最新的库版本,因为新的版本第一是复杂,第二是原作者给整出了一些bug,导致onResponse一直不回调。后来我下载了一个老的版本(2.0.1),就没有上面的问题。
红色部分引自网络,这里只给出jar库文件及代码
private SocketClient socketClient; private SocketClientDelegate delegate; //socket通信 private void startSocketClient(String info) throws IOException { String[] array = info.split("_"); socketClient = new SocketClient(); socketClient.getAddress().setRemoteIP(array[0]);//设置IP,这里设置的是本地IP socketClient.getAddress().setRemotePort(Integer.parseInt(array[1]));//设置端口 socketClient.getAddress().setConnectionTimeout(15 * 1000);//设置超时时间 socketClient.setCharsetName(CharsetUtil.UTF_8);//设置编码格式,默认为UTF-8 socketClient.connect(); // 连接,异步进行 //常用回调配置 // 对应removeSocketClientDelegate socketClient.registerSocketClientDelegate(delegate = new SocketClientDelegate() { /** * 连接上远程端时的回调 */ @Override public void onConnected(SocketClient client) { Log.d("melog", "gamesocket连接成功"); launcher.callExternalInterface("gameSocketConnectSuccess", "success"); } /** * 与远程端断开连接时的回调 */ @Override public void onDisconnected(SocketClient client) { Log.d("melog", "gamesocket连接断开"); // 可在此实现自动重连 // socketClient.connect(); launcher.callExternalInterface("socketClose", "close"); } /** * 接收到数据包时的回调 */ @Override public void onResponse(SocketClient client, @NonNull SocketResponsePacket responsePacket) { String message = responsePacket.getMessage(); // 获取按默认设置的编码转化的String,可能为null launcher.callExternalInterface("socketDataHandler", message); } }); } //发送消息 private void socketSendMessage(String info) { String status = String.valueOf(socketClient.getState()); if (socketClient != null && status == "Connected") { socketClient.sendData(info.getBytes()); // 发送byte[]消息 } } //前台请求gamesocket连接状态 private void requestGameSocketConnectFlg() { String status = String.valueOf(socketClient.getState()); launcher.callExternalInterface("gameSocketFlg", status); } //前台主动断开gamesocket private void closeGameSocket() { if (socketClient != null) { socketClient.removeSocketClientDelegate(delegate); socketClient.disconnect(); } }
如果有哪里不太明白,可以仔细阅读下github上的详细说明。但是那个说明是按照最新版本讲解的,跟老版本差别还是很大的,比如设置读取策略socketClient.getSocketPacketHelper().setReadStrategy(); 这个在老版本就没有。
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2300
- 用户1336
- 访客10860229
每日一句
True success inspires others to act.
真正的成功是激励他人行动。
真正的成功是激励他人行动。
语法错误: 意外的令牌“标识符”
全面理解Gradle - 定义Task
Motrix全能下载工具 (支持 BT / 磁力链 / 百度网盘)
谷歌Pixel正在开始起飞?
获取ElementUI Table排序后的数据
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is
亲测!虚拟机VirtualBox安装MAC OS 10.12图文教程
华为手机app闪退重启界面清空log日志问题
android ndk开发之asm/page.h: not found
手机屏幕碎了怎么备份操作?
免ROOT实现模拟点击任意位置
新手必看修改DSDT教程
thinkpad t470p装黑苹果系统10.13.2
新会员