Android-socket服务端断重启后,android客户端自动重连

今天研究这个问题搞了整整一天啊!终于出来了,不过我没有多大的成就感,为什么呢?因为这是我学长的劳动成果。同样的问题,我却没想出来!心塞的很啊……

不过还是要给大家分享一下,希望给大家带来帮助!

先声明一下:不是我不放源码,是因为这个功能是我项目的一小部分,贴源码太声势浩荡了,,而且下载后不一定能用,所以就贴核心代码啦~

我是以每分钟向服务端发送一个心跳来保持连接的,如下:

sendObject()中的代码(就是发送内容到服务端):

public void sendObject(String obj) throws IOException {
        DataOutputStream os = new DataOutputStream(socket.getOutputStream());
        os.write(obj.getBytes());
        os.flush();
        System.out.println("发送:" + obj + "客户端");
    }

重点来了,怎么保证服务重启时候自动连接呢?

public static void resetSocket(){
        while(SocketClient.isServerClose(socket)){
            try {
                socket = new Socket(SERVERIP,PORT);
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                //e.printStackTrace();
            } catch (IOException e) {
                 System.out.println("正在重连....");
                // TODO Auto-generated catch block
                //e.printStackTrace();
            }

         }
   }

     /**
        * 判断是否断开连接,断开返回true,没有返回false
        * @param socket
        * @return
        */
        public static Boolean isServerClose(Socket socket){
           try{
            socket.sendUrgentData(0);//发送1个字节的紧急数据,默认情况下,服务器端没有开启紧急数据处理,不影响正常通信
            return false;
           }catch(Exception se){
            return true;
           }
        }  

最后,将SocketClient.resetSocket();放入图片中的catch{}中,捕获异常的时候重新连接,就可以实现想要的效果了。

希望给大家带来帮助,谢谢!

时间: 2024-12-29 01:19:19

Android-socket服务端断重启后,android客户端自动重连的相关文章

使用线程实现socket服务端同时响应多个客户端

1 #利用线程实现服务端同时响应多个客户端 2 #!-*- conding:utf-8 -*- 3 import socket 4 import threading 5 import time 6 addr=("127.0.0.1",8808) 7 conn=socket.socket() 8 conn.connect((addr)) 9 def pro(aa): 10 data = conn.recv(1024) 11 print(str(data, encoding="u

Android—Socket服务端与客户端用字符串的方式互相传递图片

发送图片: 首先找到具体传递的图片: private Bitmap getimage(String srcPath) { BitmapFactory.Options newOpts = new BitmapFactory.Options(); // 开始读入图片,此时把options.inJustDecodeBounds 设回true了 newOpts.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeFile(srcP

Android从服务端获取json解析显示在客户端上面

Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据的体积更加小,传输效率高,易解析,不过可读性不高; 因为这次要从服务器端得到Json数据,并且通过解析之后把解析后的数据显示在Android客户端中,首先部署服务器端代码(直接使用Jsp/Servlet): 构造的Json数据如下: [{"name":"张三",&

socket服务端和客户端

#!/usr/bin/env python#encoding: utf-8import socketdef handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, World") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREA

C# Socket服务端与客户端通信(包含大文件的断点传输)

步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收信息   (3)发送数据(这里分发送字符串.文件(包含大文件).震动) 二.客户端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收信息   (3)发送数据(这里分发送

Socket服务端一直收空包的原因与解决方法

最近做socket服务端,大部分时候系统是正常的,但是运行个一段时间就会一直以超高的频率收到很多数据,一开始以为是下位机上报的,没怎么上心,后来下位机工程师说他们没上报,所以重新看了下代码,发现程序会一直调用 netStream.BeginRead,EndRead,一直收数据,而且受到的数据包都是0字节,百度了20分钟,大神们说socket客户端正常关闭的时候服务端会收到一个长度是0的数据包,如果一直循环调用会一直收到,原话如下 出现原因:一.用户正常退出,这时你还循环调用了Receive方法时

使用NewLife网络库构建可靠的自动售货机Socket服务端(一)

最近有个基于tcp socket 协议和设备交互需求,想到了新生命团队的各种组件,所以决定用NewLife网络库作为服务端来完成一系列的信息交互. 第一,首先说一下我们需要实现的功能需求吧 1,首先客户有一堆自动售货机的设备,设备连接socket服务端后 定时发送设备实时状态作为心跳信息,并且服务端需要下发信息予以确认. 2,需要知道设备的实时在线状态 3,设备需要实现微信,支付宝扫码支付需求,当客户买东西的时候选择扫码支付时,设备上报产品价格信息,支付方式,服务器下发微信或者支付宝的当面付二维

最简单的一个socket服务端

描述:这是一个socket服务端,可以用串口调试工具连接和发送数据过来 package com.thinkgem.wlw.modules.lhjh.socket.tstandard; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import j

C# Socket服务端和客户端互相send和receive

服务端 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Net.Sockets; 5 using System.Net; 6 using System.Threading; 7  8 namespace Controller 9 {10     public static class SocketServer11     {12         private stat