如何高效实现Android/Java Socket 长连接通信

当我们需要将Android客户端要始终保持与服务端的连接,当服务端有任务或消息发送到android客户端的时候就发送,没有任务或消息的时候不发送但要保持这个连接,一旦有任务则开发发送,而我们的android客户端则要保持一个时刻接收任务或消息的状态。这个时候我们通过socket来实现这种需求。当然你也可以采用http轮询的方式来不断的从客户端个请求服务端,这样做有一定的弊端。

实现原理:

1:android客户端通过service在后台通过servreScoket不断的accept,一旦有相应的socket到达,则启动一个线程去处理

2::在线程中处理完返回给我们android客户端的消息或任务之后,要将这种结果表现在ui上,这个步骤方法就比较多了,例如你可以发一个广播来通知ui,或者你可以通过一个static的handler来处理

下面通过一段代码来说明这一问题:

import java.*; //服务器端

public class Server {

public static void main(String args[])throws Exception

{

String ClientMessage;

String ServerMessage;

ServerSocket serversocket=new ServerSocket(5557);//端口要和客户端对应

System.out.println("正在监听5555端口");//

while(true)

{

Socket collection=serversocket.accept();//调用accept()函数,建立TCP连接

DataInputStream fromClient=new DataInputStream(collection.getInputStream());

DataOutputStream toClient=new DataOutputStream(collection.getOutputStream());

ClientMessage=fromClient.readUTF();//接收来自客户端的信息

ServerMessage=ClientMessage.toUpperCase();//转换为大写

toClient.writeBytes(ServerMessage);//写到服务器端

}

}

}

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180202A0E1F000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券