Android 使用Socket(TCP协议)实现监控(类似于及时通讯)服务器端使用Walkman

最近的项目要实现一台平板控制其余平板的功能(类即时通讯),主要用tcp或者udp进行开发,因为要保证一台机的命令要“发到”其余的机器上,我采取的是数据接收安全的TCP。思路如下图:1.客户端负责发送与“接收”(其实不是服务端向客户端发送数据而是客户端自己在服务器读取),当然前提服务器提供URL与端口(PORT)。2.难点:1,客户端与服务器断了能够重连(即当客户端断网了或者服务器崩
摘要由CSDN通过智能技术生成

最近的项目要实现一台平板控制其余平板的功能(类即时通讯),主要用tcp或者udp进行开发,因为要保证一台机的命令要“发到”其余的机器上,我采取的是数据接收安全的TCP。思路如下图:


1.客户端负责发送与“接收”(其实不是服务端向客户端发送数据而是客户端自己在服务器读取),当然前提服务器提供URL与端口(PORT)。

2.难点:1,客户端与服务器断了能够重连(即当客户端断网了或者服务器崩了,客户端能显示此时断了并能够重连)即心跳感应

                   

                  由客户端在一定的时间向服务器消息比如“ping”,服务器会在一定的时间内返回pong,如果在这段的时间内客户端没有接受到pong,则判定socket断了。这里我使用                   了github上别人封装好的socket,并修改了一些东西。(本人是一级代码搬运工,擅长快速修改运用第三方代码,使之完美契合项目)。

                  附上链接: https://github.com/vilyever/AndroidSocketClient     主要是对里面的clientsocket类做了修改:

package utils;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.util.Log;
import android.widget.Toast;

import com.alibaba.fastjson.JSON;
import com.wyt.hcy.aiyixue_teacher.WelcomeActivity;

import Jsonbean.TeacherLoginRequest;
import application.App;
import contacts.Contacts;
import contacts.SendOrderBean;
import databse.DbUtils;
import socketclient.SocketClient;
import socketclient.helper.SocketClientDelegate;
import socketclient.helper.SocketClientReceivingDelegate;
import socketclient.helper.SocketClientSendingDelegate;
import socketclient.helper.SocketPacket;
import socketclient.helper.SocketPacketHelper;
import socketclient.helper.SocketResponsePacket;
import socketclient.util.CharsetUtil;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;


/**
 * TestClient
 * Created by vilyever on 2016/7/26.
 * Feature:
 */
public class ClientSocket {

    public interface IsConnectedListener {
        void sendMes(SocketClient client);
    }
    private IsConnectedListener listener;
    public void setListener(IsConnectedListener listener) {
        this.listener = listener;
    }
    private Context context;
    public ClientSocket(Context context) {
        this.context = context;
    }
    final ClientSocket self = this;
    public void connect() {
        self.getLocalSocketClient().connect();
    }
    private SocketClient localSocketClient;
    public SocketClient getLocalSocketClient() {
        if (this.localSocketClient == null) {
            this.localSocketClient = new SocketClient();
            __i__setupAddress(this.localSocketClient);
            __i__setupEncoding(this.localSocketClient);
            __i__setupConstantHeartBeat(this.localSocketClient);
            __i__setupReadByLengthForSender(this.localSocketClient);
            __i__setupReadByLengthForReceiver(this.localSocketClient);
            this.localSocketClient.registerSocketClientDelegate(new SocketClientDelegate() {
                @Override
                public void onConnected(SocketClient client) {
                    Toast.makeText(context, "服务器已连接", Toast.LENGTH_SHORT).show();
                    DbUtils dbUtils=DbUtils.getInstance(context);
                    String userno = dbUtils.getTeacher().getUserno();
                    TeacherLoginRequest teacherLoginRequest = new TeacherLoginRequest(userno);

                    SendOrderBean sendOrderBean = new SendOrderBean("teacherLoginRequest", JSON.toJSONString(teacherLoginRequest), System.currentTimeMillis() + "");

                    client.sendString(JSON.toJSONString(sendOrderBean));
                    if (listener != null) {
                        listener.sendMes(client);
                    }

                }

                @Override
                public void onDisconnected(final SocketClient client) {
                    Toast.makeText(context, "服务器断开连接", Toast.LENGTH_SHORT).show();

                    new AsyncTask<Void, Void, Void>() {
                        @Override
                        protected Void doInBackground(Void... params) {
                            try {
                                Thread.sleep(3 * 1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }

                            client.connect();

                            return null;
                        }

                        @Override
                        protected void onPostExecute(Void aVoid) {
                            super.onPostExecute(aVoid);

                        }
                    }.execu
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值