IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Android实现Tcp client端(java) -> 正文阅读

[网络协议]Android实现Tcp client端(java)

TCPClient .java

package com.example.testtcp;

import android.util.Log;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

public class TCPClient {
    private static final String TAG = "TCPClient";

    private String ip;
    private int port;

    private Socket mSocket;
    private SocketAddress mSocketAddress;
    private OutputStream mOutputStream;
    private InputStream mInputStream;
    private ReadThread mReadThread;
    private boolean _isConnected = false;
	private boolean syncDataFlag = false;
	private String mData;

    public TCPClient(String ip, int port) {
        this.ip = ip;
        this.port = port;
    }


    public void connect() {
        try {
            Log.d(TAG, "connect: start");
            this.mSocket = new Socket();
            this.mSocket.setKeepAlive(true);
            this.mSocketAddress = new InetSocketAddress(ip, port);
            this.mSocket.connect( mSocketAddress, 10000);// 设置连接超时时间为10秒
            this.mOutputStream = mSocket.getOutputStream();
            this.mInputStream = mSocket.getInputStream();

            this.mReadThread = new TCPClient.ReadThread();
            this.mReadThread.start();
            this._isConnected = true;

            Log.d(TAG, "connect: start");
        } catch (IOException e) {
            e.printStackTrace();
            Log.e(TAG, "connect: " +e);
            Log.d(TAG, "connect: fail");
        }
    }



    public String getData() {
        while (!syncDataFlag) {
                Thread.sleep(500);
        }
        return mData;
    }

    public void close() {

        if (this.mReadThread != null) {
            this.mReadThread.interrupt();
        }
        if (this.mSocket != null) {
            try {
                this.mSocket.close();
                this.mSocket = null;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        this._isConnected = false;
    }

    public boolean isConnected() {
        return this._isConnected;
    }


    public void send(String testData) {
        try {
            byte[] msg = testData.getBytes();
            byte[] len = intToByteArray(msg.length);
            byte[] messageBody = new byte[len.length +msg.length];
            System.arraycopy(len, 0, messageBody, 0, len.length);
            System.arraycopy(msg, 0, messageBody, len.length, msg.length);
            this.mOutputStream.write(messageBody);
            Log.d(TAG, "SyncScenarioEngine: write end");
            
        } catch (Exception e) {
            Log.e(TAG, "connect: " +e);
        }
    }

    private class ReadThread extends Thread {
        @Override
        public void run() {
            super.run();
            while (!isInterrupted()) {
                try {
                    if (TCPClient.this.mInputStream == null) {
                        return;
                    }
                    int available = TCPClient.this.mInputStream.available();
                    if (available > 0) {

                        byte[] buffer = new byte[1024];
                        int size = mInputStream.read(buffer);
                        if (size > 0) {
                            syncScenarioListFlag = true;
                            byte[] len = new byte[4];
                            System.arraycopy(buffer, 0, len, 0, len.length);
                            byte[] megBody = new byte[buffer.length - len.length];
                            System.arraycopy(buffer, len.length, megBody, 0, megBody.length);
                            JSONObject jsonObj = new JSONObject(new String(megBody));
                            mData = String.valueOf(jsonObj.getJSONArray("params"));
							syncDataFlag = true;
                        }
                    } else {
                          Thread.sleep(10);
                    }
                } catch (Throwable e) {
                    System.out.println(e.getMessage());
                    return;
                }
            }
        }
    }
	
	private byte[] intToByteArray(int i) {
        byte[] result = new byte[4];
        //由高位到低位
        result[0] = (byte)((i >> 24) & 0xFF);
        result[1] = (byte)((i >> 16) & 0xFF);
        result[2] = (byte)((i >> 8) & 0xFF);
        result[3] = (byte)(i & 0xFF);
        return result;
    }

    private int byteArrayToInt(byte[] bytes) {
        int value=0;
        //由高位到低位
        for(int i = 0; i < 4; i++) {
            int shift= (4-1-i) * 8;
            value +=(bytes[i] & 0x000000FF) << shift;//往高位游
        }
        return value;
    }
}

MainActivity.java

package com.example.scenariotcp;

import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "TCPClient";
    private TCPClient tcpClient = null;
    private String ip = "192.168.100.108";
    private int port = 35100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate: statrt ");
        tcpClient = new TCPClient(ip, port);
        tcpClient.connect();//连接TCPServer
        if (tcpClient.isConnected()) {
            Log.d(TAG, "onCreate: isconnect ");
            //发送数据
            String outContent = "TCPClient say hello";
            String data = tcpClient.send(outContent);
            Log.d(TAG, "onCreate: data = " + tcpClient.getData);
        }

        Log.d(TAG, "onCreate: end ");
        //关闭连接
        tcpClient.close();
    }
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:46:48  更:2021-12-04 13:47:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/6 7:48:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码