Android开发TCP连接

本文介绍了在Android开发中如何进行TCP连接,包括添加必要的依赖库`com.koushikdutta.async:androidasync:2.+`,并详细阐述了TCP连接的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、添加依赖
compile ‘com.koushikdutta.async:androidasync:2.+’
二、应用

public class TCPHandle {

    public static long flowNumber=0;
    public static boolean isOnWebCall=false;
    public static final int PORT = "端口号";
    public static final String HOST = "ip地址";
    public static AsyncSocket _asysocket;
    public  static String TOken="";
    public static String Uid="";


    /**
     * 判断某个界面是否在前台
     * @param context   Context
     * @param className 界面的类名
     * @return 是否在前台显示
     */
    public static boolean isForeground(Context context, String className) {
        if (context == null || TextUtils.isEmpty(className))
            return false;
        ActivityManager am = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1);
        for (ActivityManager.RunningTaskInfo taskInfo : list) {
            if (taskInfo.topActivity.getShortClassName().contains(className)) { // 说明它已经启动了
                return true;
            }
        }
        return false;
    }

    private static void handleConnectCompleted(Exception ex, final AsyncSocket socket) {
        isConnecting=false;
        if (ex != null) {
            System.out.println(ex);
            return;
        }
        _asysocket = socket;
        socket.setDataCallback(new DataCallback() {
            @Override
            public void onDataAvailable(DataEmitter emitter, ByteBufferList bb) {
                byte[] _data = bb.getAllByteArray();
                System.out.println("Recdata:"+Protrol.getInstance().bytesToHexString(_data));
                //需要验证数据有效转义还原之类
                if(Protrol.getInstance().isValid(_data)){    //检验有效性
                    byte[]data =  Protrol.getInstance().getCheckData(_data);
                    switch(data[1]){    
                        case (byte) 0x81:    //登录
                            if(data[2]==0x01){
                                RxBus.get().post(BusAction.LogIn_Home,data);   //登录成功
                            }
                            break;
                        default:
                            break;
                    }

                }


            }
        });

        socket.setClosedCallback(new CompletedCallback() {
            @Override
            public void onCompleted(Exception ex) {
                _asysocket = null;
                Uid="";
                TOken="";
                if (ex != null) {
                    System.out.println(ex);

                }
                System.out.println("[Client] Successfully closed connection");

            }
        });

        socket.setEndCallback(new CompletedCallback() {
            @Override
            public void onCompleted(Exception ex) {
                _asysocket = null;
                Uid="";
                TOken="";
                if (ex != null) {
                    System.out.println(ex);

                }
                System.out.println("[Client] Successfully end connection");

            }
        });
    }

    public static boolean writedString(String datastring) {
        if (_asysocket != null) {
            byte[] send = datastring.getBytes();
            ByteBufferList data = new ByteBufferList(send);
            try{
                _asysocket.write(data);

            }catch (Exception e){
                    e.printStackTrace();

            }
            return true;
        }
        return false;
    }

    public static boolean writedData(byte[] send) {
        if (_asysocket != null) {
            ByteBufferList data = new ByteBufferList(send);
            try{
                _asysocket.write(data);

            }catch (Exception e){
                e.printStackTrace();

            }
            System.out.println("发送数据到服务器:");
            System.out.println(Protrol.getInstance().bytesToHexString(send));
            return true;
        }
        return false;
    }
    public static boolean isConnecting=false;
    public static synchronized boolean Connect() {
        isConnecting=true;
        if (AsyncServer.getDefault().isRunning()) {
            RxBus.get().post(BusAction.Main_Toeast, "已经创建过链接了");
            isConnecting=false;
            return true;
        }
        try {
            AsyncServer.getDefault().connectSocket(new InetSocketAddress(HOST, PORT), new ConnectCallback() {
                @Override
                public void onConnectCompleted(Exception ex, final AsyncSocket socket) {
                    isConnecting=false;
                    handleConnectCompleted(ex, socket);
                }
            });
        } catch (Error error) {
            isConnecting=false;
        }

        return false;
    }

    public static void Stop() {
        AsyncServer.getDefault().stop();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值