You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android与Linux PC通过TCP+ADB反向转发IPC连接成功但收空数据

Android客户端通过ADB反向TCP转发向Python服务端发送数据为空

问题概述

尝试通过TCP+ADB反向转发实现Android手机与Linux PC的进程间通信,Android端作为客户端发送字符串laneInfoStr,PC端Python进程作为服务端接收。当前服务端可正常接受连接,但始终收到空字符串。

实现细节

ADB端口反向转发命令

adb reverse tcp:8888 tcp:8888

Android客户端核心发送代码

每次发送会启动新线程执行sendMessage方法:

// 线程启动代码
new Thread(new Runnable() {
    @Override
    public void run() {
        sendMessage();
    }
}).start();

// 消息发送方法
public void sendMessage() {
    Log.d("wlx", String.format("sending: %s", laneInfoStr));
    try (
         Socket socket = new Socket("localhost", 8888)) {
        boolean connected = socket.isConnected(); 
        if (connected) {
            Log.d("wlx", "connected successfully");
        } else {
            Log.e("wlx", "failed to connect");
        }

        OutputStream out = socket.getOutputStream();
        PrintWriter output = new PrintWriter(out);
        output.println(laneInfoStr);
        output.flush();
        output.close();
        Log.d("wlx", "message sent successfully!");
    } catch (IOException e) {
        Log.e("wlx", "failed to send message!");
        Log.e("wlx", e.getMessage());
    }
}

Python服务端代码

import socket
import threading

def handle_client(client_socket):
    try:
        request = client_socket.recv(1024)
        print(f"received client's message: {request}")
        client_socket.send("hi from server".encode())
    except IOError:
        print("failed to read client socket or send message")
        client_socket.close()
    finally:
        client_socket.close()

if __name__ == "__main__":
    bind_ip = "0.0.0.0" 
    bind_port = 8888  

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind((bind_ip, bind_port))
    print("[*] Listening on %s:%d" % (bind_ip, bind_port))
    server.listen(5)
    
    while True:
        client, addr = server.accept()
        print("accepted connection from %s:%d" % (addr[0], addr[1]))
        client_handler = threading.Thread(target=handle_client, args=(client,))
        client_handler.start()

已执行操作与日志

操作顺序:先启动Python服务端,再启动Android客户端发送消息。

Android客户端日志

sending: 00,40
connected successfully
message sent successfully!

Python服务端日志

[*] Listening on 0.0.0.0:8888
accepted connection from 127.0.0.1:43823
received client's message: b''

客户端日志显示laneInfoStr非空,且无发送异常,但服务端始终接收空数据。

预期结果

服务端应接收到消息,日志输出:

received client's message: b'00,40\n'

实际结果

服务端接收空字符串,日志输出:

received client's message: b''

内容的提问来源于stack exchange,提问作者David Yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:15:31