android 端监听socket

在物联网项目开发中,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;
        }
    }







  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值