WiFi和热点开发——tcp连接查看实时日志

本文介绍了如何通过连接Android设备的WiFi热点,在手机上实时查看设备的日志,避免了使用USB线和笔记本电脑,简化了现场问题定位的过程。服务端通过线程池处理多个客户端请求,客户端则通过持续读取服务端数据并更新UI实现日志显示。
摘要由CSDN通过智能技术生成

本人从事多年的Android智能设备开发,做过手机、MiFi、智能门锁等产品,除了手机之外,其他的产品在后期的维护及版本迭代过程中,经常需要通过分析查看设备的日志来定位问题,比如智能门锁,遇到故障时,经常就抱着一台笔记本,打开设备的usb调试开关后,用usb线连接设备进行问题重现和日志分析。当然,获取日志的方式是多种多样的,也可以通过网络上传。但总免不了需要现场查看,现场查看就有个问题,笔记本并不是随身携带,而手机确实随身携带的,因此,能不能在手机端实时查看设备的日志呢?答案是肯定的。
MiFi和智能门锁都开放了热点,因此,调试的手机可以连接到设备的热点,进行组网后实现实时日志查看。这种方式既不需要数据线,也不需要笔记本,甚至usb调试开关也不用开启。
先说服务端(设备端),注意这里用到了线程池,因此服务端是具备了一对多进行响应的基础能力的:

    /**
     * @作用 开启tcp服务
     */
    public void startTCP() {
        if (runnableTcp != null) {
            isStart = false;
            runnableTcp = null;
        }
        try {
            runnableTcp = new TcpReceive();
            threadTcp = new Thread(runnableTcp);
            isStart = true;
            threadTcp.start();
        } catch (Exception e) {
            logd("开启TCP失败:" + e.getMessage());
        }

        try {
            mExe = Executors.newCachedThreadPool();// 创建一个线程池
        } catch (Exception e) {
            logd("创建线程池失败:" + e);
        }
    }

    private class TcpReceive implements Runnable {
   
        Socket socket = null;
        ServerSocket server = null;

        public void run() {
            try {
                //server = new ServerSocket(53858);
                if (server == null) {
                    server = new ServerSocket();
                    server.setReuseAddress(true);
                    server.bind(new InetSocketAddress(53858));
                }
                allSockets = new HashSet<Socket>();
                while (isRunning) {
                    if (!server.isClosed()) {
                        //logd("serverSocket "+server.hashCode()+" 监听53858端口中...");
                        socket = server.accept();
                    }
                    if (socket != null) {
                        allSockets.add(socket);
                        //logd("新的socket " + socket.hashCode() + " 加入,当前socket总数为:" + allSockets.size());
                        mExe.execute(new EchoThread(socket));
                    }

       
当你使用ESP32连接WiFiTCP服务器时,你可以使用ESP32的WiFiWiFiClient库。下面是一个示例代码,展示了如何连接WiFi并创建一个TCP客户端,用于连接到远程的TCP服务器: ```cpp #include <WiFi.h> #include <WiFiClient.h> // 定义WiFi网络的信息 const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // 定义TCP服务器的信息 const char* serverIP = "server_IP_address"; const int serverPort = 1234; // 创建一个TCP客户端对象 WiFiClient client; void setup() { // 初始化串口通信 Serial.begin(115200); // 连接WiFi网络 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi!"); // 连接TCP服务器 if (client.connect(serverIP, serverPort)) { Serial.println("Connected to TCP server!"); } else { Serial.println("Failed to connect to TCP server!"); } } void loop() { // 主循环 if (client.connected()) { // 在这里可以发送和接收数据 // ... } else { Serial.println("Lost connection to TCP server!"); // 如果连接断开,尝试重新连接 client.stop(); if (client.connect(serverIP, serverPort)) { Serial.println("Reconnected to TCP server!"); } else { Serial.println("Failed to reconnect to TCP server!"); } } } ``` 在上面的示例中,我们使用`WiFi.h`和`WiFiClient.h`库来连接WiFi和创建TCP客户端。首先,我们定义了要连接WiFi网络的SSID和密码,以及远程TCP服务器的IP地址和端口号。然后,在`setup()`函数中,我们连接WiFi网络,并通过`client.connect()`方法连接TCP服务器。在`loop()`函数中,我们检查TCP连接是否仍然有效,如果连接断开,我们会尝试重新连接。 请注意,你需要将示例代码中的`your_SSID`、`your_PASSWORD`和`server_IP_address`替换为你实际使用的值。确保你的ESP32能够正常连接WiFi,并且远程TCP服务器可用。根据你的实际需求,你可以在`loop()`函数中添加发送和接收数据的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值