运行 Python 通过 ADB 的套接字脚本

Running Python socket script through ADB

我有一个不寻常的问题。我想通过 ADB 在我的 android 智能手机上 运行 一些代码(已经设置了 SL4A)然后我希望它充当服务器并在我的主机上响应程序的结果机器充当客户端并接收此数据。但是,我不是套接字操作方面的专家,而且我得到的结果我不明白。我的代码如下:

from device import android
import socket

droid = android.Android()

# Open socket
s = socket.socket()
HOST = socket.gethostname()
PORT = 8000
s.bind((HOST, PORT))
s.listen(5)

print "HOST = ", HOST, ", PORT = ", PORT

# Accept instructions
c, addr = s.accept()
print "Got connection from", addr

data = ""
while True:
    chunk = c.recv(1024)
    if (not chunk):
        break
    else:
        data.extend(chunk)
s.close()

# DO STUFF WITH RECEIVED INPUT

# Send result
c, addr = s.accept()
print "Got connection from", addr
while True:
    if (c.send(str(result)):
        break
s.close()

我在客户端(我的主机)上 运行 的代码如下:

s = socket.socket()
HOST = "localhost"
PORT = 8000
s.connect((HOST, PORT))
s.send(data)
s.close()

# IN A DIFFERENT FUNCTION

s = socket.socket()
HOST = "localhost"
PORT = 8000
try:
    s.connect((HOST, PORT))
    results = s.recv(1024)
    s.close()
    return results
except Exception:
    return False

环境已经搭建完成:

set AP_PORT=54023
adb forward tcp:%AP_PORT% tcp:%AP_PORT%

所以,这应该如何工作是这样的:服务器在我的 Android 智能手机上设置为 运行 并接受对 运行 我 [=] 上程序的输入28=] 来自另一个程序的智能手机 运行ning 在我的电脑上。 Android 程序完成 运行ning 后,它应该将结果发送回我的电脑。

但是,我遇到了几个问题。我似乎无法打开第一个连接。我得到 10061 或 10049,我不确定为什么会这样。我查看了可用的现有文档,但仍然没有得到结果。我也不确定这段代码是否真的 运行ning 在 Android 设备上,这对我的应用程序非常重要,所以我真的需要对此进行某种确认。

任何启发将不胜感激。

服务器程序在遇到异常之前永远不会结束,因为您设置了一个 inf 循环:while True
c.close()关闭当前连接,然后循环再次开始,程序等待另一个连接接受。

主机程序应该在消息发送后或遇到异常时结束。

你是什么意思:" 我得到的结果我不明白...这段代码运行没有错误...我遇到的问题是我不是得到任何结果?

你得到了什么结果?你检查过 data 变量了吗?