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
相关产品推荐
相关产品推荐

