android 端监听socket

来源:互联网 发布:今日影评表演者 知乎 编辑:程序博客网 时间:2024/06/03 20:41

在物联网项目开发中,Socket编程是至关重要的,如下是我项目中所运用到的android作为服务端的案例,与大家分享:


为了保证公司项目的保密性, 只记录关键的功能 实现代码 ,不提供 业务逻辑。

Socket一直监听为耗时操作需要在子线程操作,避免阻塞主线程。

android端代码 :

private int socket_port=9999;    private boolean ifListen  =true;    /**     * 开始监听     */    private Thread socketThread = new Thread() {        public void run() {            while (true) {                try {                    if (serverSocket == null && ifListen) {                        serverSocket = new ServerSocket(socket_port);//                        serverSocket.setSoTimeout(60*1000);                    } else if (serverSocket != null) {                        socket = serverSocket.accept();                        if (socket != null) {                            DataInputStream in = new DataInputStream(new BufferedInputStream(socket                                    .getInputStream()));                            try {                                ByteArrayOutputStream outStream = new ByteArrayOutputStream();                                byte[] buffer = new byte[1024];                                int len = 0;                                while ((len = in.read(buffer)) != -1) {                                    outStream.write(buffer, 0, len);                                }                                byte[] data = outStream.toByteArray();                                dataString = new String(data, "utf-8");AppLog.Log(dataString);} catch (Exception e) { AppLog.Log(AppLog.LogType.ERROR, "DataService read: " + e); destorySocket(); } } } } catch (IOException e1) { AppLog.Log(AppLog.LogType.ERROR, "DataService accept: " + e1); destorySocket(); } try { Thread.sleep(Config.KEEP_ALIVE_RESPONSE_TIMEOUT); } catch (InterruptedException e) { AppLog.Log(e.toString());} }} };public void startListen() {        ifListen = true;        if (!ifSocketThreadStart) {            ifSocketThreadStart = true;            socketThread.start();        }    }    public void stopListen() {        ifListen = false;        destorySocket();    }    private void destorySocket() {        AppLog.Log("destorySocket");        try {            if (serverSocket != null && !serverSocket.isClosed()) {                serverSocket.close();            }        } catch (IOException e) {            AppLog.Log(e.toString());        } finally {            serverSocket = null;        }        try {            if (socket != null && !socket.isClosed()) {                socket.close();            }        } catch (IOException e) {            AppLog.Log(e.toString());        } finally {            socket = null;        }    }







0 0
原创粉丝点击