Android 通过Socket 和服务器通讯,是一种比较常用的通讯方式,时间比较紧,说下大致的思路,希望能帮到使用socket 进行通信的人
(1)开启一个线程发送消息 SocketOutputThread
消息是放在队列里的,当有消息后,进入队列,线程唤醒,发送消息,并反馈发送是否成功的回调
(2)开启一个线程接受服务器消息 SocketInputThread
为了防止一直收数据,浪费电池的电,采用NIO的方式读socket的数据,这个是本文的关键
(3)开启一个线程,做心跳,防止socket连接终断 , SocketHeartThread
(4)构建 SocketThreadManager对以上三个thread进行管理
(5)构建 TCPClient 发送socket消息
在NIO的方式实现TCP,特别是在接收服务器的数据,不用写个线程定时去读了。
本文地址(http://www.cnblogs.com/likwo/p/3641135.html)

DEMO 截图
主要代码如下,详细代码在附件里。
SocketOutPutThread 类
View Code
SocketInputThread
View Code
SocketHeartHread 心态类
View Code
线程管理类
package com.example.socketblockdemo; import android.os.Handler; import android.text.TextUtils; public class SocketThreadManager { private static SocketThreadManager s_SocketManager = null; private SocketInputThread mInputThread = null; private SocketOutputThread mOutThread = null; private SocketHeartThread mHeartThread = null; // 获取单例 public static SocketThreadManager sharedInstance() { if (s_SocketManager == null) { s_SocketManager = new SocketThreadManager(); s_SocketManager.startThreads(); } return s_SocketManager; } // 单例,不允许在外部构建对象 private SocketThreadManager() { mHeartThread = new SocketHeartThread(); mInputThread = new SocketInputThread(); mOutThread = new SocketOutputThread(); } /** * 启动线程 */ private void startThreads() { mHeartThread.start(); mInputThread.start(); mInputThread.setStart(true); mOutThread.start(); mInputThread.setStart(true); // mDnsthread.start(); } /** * stop线程 */ public void stopThreads() { mHeartThread.stopThread(); mInputThread.setStart(false); mOutThread.setStart(false); } public static void releaseInstance() { if (s_SocketManager != null) { s_SocketManager.stopThreads(); s_SocketManager = null; } } public void sendMsg(byte [] buffer, Handler handler) { MsgEntity entity = new MsgEntity(buffer, handler); mOutThread.addMsgToSendList(entity); } }
TCPClient ,采用NIO的方式构建
View Code
如何使用
// 发送消息,失败或者成功的handler SocketThreadManager.sharedInstance().sendMsg(str.getBytes(), handler);
代码下载 http://files.cnblogs.com/likwo/SocketBlockDemo.zip

796

被折叠的 条评论
为什么被折叠?



