Ich habe ein etwas ungewöhnliches Problem. Ich möchte etwas Code auf meinem Android-Smartphone über die ADB (die zusammen mit SL4A bereits eingerichtet ist) laufen und dann möchte ich es als ein Server fungieren und mit den Ergebnissen des Programms reagieren, während meine Host-Maschine als Client fungiert und diese empfängt Daten. Ich bin jedoch kein Experte für Socket-Operationen und bekomme Ergebnisse, die ich nicht verstehe. Mein Code ist wie folgt:Ausführen von Python Socket-Skript über ADB
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()
Der Code, den ich auf dem Client laufen lasse, meine Host-Maschine ist wie folgt:
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
Die Umwelt auf diese Weise eingerichtet wurde:
set AP_PORT=54023
adb forward tcp:%AP_PORT% tcp:%AP_PORT%
Also, wie soll das funktionieren: Der Server ist so eingerichtet, dass er auf meinem Android-Smartphone läuft und Eingaben akzeptiert, um das Programm auf meinem Android-Smartphone von einem anderen Programm auf meinem PC auszuführen. Nachdem das Android-Programm beendet wurde, sollte es das Ergebnis zurück an meinen PC senden.
Allerdings habe ich mehrere Probleme. Ich kann die erste Verbindung anscheinend nicht öffnen. Ich bekomme entweder 10061 oder 10049 und bin mir nicht sicher, warum das so ist. Ich habe mir die vorhandene Dokumentation angeschaut und bekomme immer noch keine Ergebnisse. Ich bin mir auch nicht sicher, ob dieser Code tatsächlich auf dem Android-Gerät ausgeführt wird, und das ist sehr wichtig für meine Anwendung, so dass ich wirklich eine Bestätigung dafür brauche.
Jede Aufklärung würde sehr geschätzt werden.
Ja, das ist das Problem. Die 'Daten' var ist leer, nachdem ich empfangen habe, also bin ich mir nicht sicher, was passiert – Woody1193
Ok, und c.send() welcher Wert zurück? Verwenden Sie Python 3? – JumpAlways
Soweit ich in der Lage war zu sagen, ist kein Wert zurückgegeben. Ich benutze Python 2.7.6 auf meinem Host-Rechner und 2.6.2 auf Android (das entspricht Python 3). – Woody1193