android 心跳 简书,Android Socket保持心跳长连接,断线重连

昨天三点钟才睡觉的,现在胸口感觉闷闷的,兄弟们,我是不是要GG了?如果我G了,求大佬们给我烧个女朋友,

d6e881bdcd15?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=qq

ss.gif

1.在使用Socket连接客户端和服务器端的时候,如果服务端断开了连接,我们客户端是收不到任何回调消息的,只是在你发送消息给服务器的时候,会走异常,表示发送失败。

2.所以要判断服务器是否在线,就需要客户端不停的发送心跳消息给服务器,服务器收到心跳消息,就立马回复给你消息,这样就 能知道双方是否都在线。

3.如果在一段时间内,还是没有收到服务器回复的消息,就表示服务器可能已经死了,这时候你可能需要去做一些提示信息给Android前台。

4.在这一段时间内,你可以不停的尝试重新建立Socket连接,即断线重连。

上代码吧:

首先正常创建一个Activity,并创建一个TcpService服务,在服务中去进行Socket的相关操作。在connection中回调的clientBinder 对象,就是Activity和Service通讯的桥梁。上一篇我们是在Activity里去进行Socket测试的,用Service显然要比用Activity好的多。

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Intent intent = new Intent(this,TcpService.class);

bindService(intent,connection,BIND_AUTO_CREATE);

}

ServiceConnection connection = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

TcpService.ClientBinder clientBinder = (TcpService.ClientBinder) service;

clientBinder.startConnect();

}

@Override

public void onServiceDisconnected(ComponentName name) {

}

};

}

在TcpService的onBind()方法中,我们首先需要返回ClientBinder这个对象,然后调用clientBinder.startConnect()建立Socket连接。

public void startConnect() {

//在子线程进行网络操作

// Service也是运行在主线程,千万不要以为Service意思跟后台运行很像,就以为Service运行在后台子线程

if (mExecutorService == null) {

mExecutorService = Executors.newCachedThreadPool();

}

mExecutorService.execute(connectRunnable);

}

private Runnable connectRunnable = new Runnable() {

@Override

public void run() {

try {

// 建立Socket连接

mSocket = new Socket();

mSocket.connect(new InetSocketAddress("192.168.1.186", 8292), 10);

bis = new BufferedInputStream(mSocket.getInputStream()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值