2016-03-21 15 views
0

私は多少珍しい問題があります。私は、ADB(SL4Aと一緒に設定されている)を介して私のアンドロイドスマートフォンでいくつかのコードを実行したいと思うし、私はそれがサーバーとして動作し、私のホストマシンがクライアントとして動作し、データ。しかし、私はソケット操作の専門家ではなく、理解できない結果を得ています。ADBでPythonソケットスクリプトを実行

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スマートフォンで動作するように設定されており、自分のPC上で実行されている別のプログラムからAndroidスマートフォンでプログラムを実行するための入力を受け入れるように設定されています。 Androidプログラムの実行が終了したら、結果を自分のPCに送り返す必要があります。

しかし、いくつか問題があります。私は最初の接続を開くことができないようです。私は10061年代と100年代のどちらかを取得していますが、私はそれがなぜなのか分かりません。私は利用可能な既存のドキュメントを見てきましたが、私はまだ結果を得ていません。私はまた、このコードがAndroidデバイス上で実際に動作しているかどうかもわかりません。これは私のアプリケーションにとって非常に重要です。

すべての啓発は非常に高く評価されるでしょう。

答えて

1

サーバプログラムは、infループを設定しているため、例外になるまで終了しません。while True
c.close()現在の接続を閉じると、ループが再び開始され、プログラムは別の接続が受け入れられるのを待ちます。

メッセージが送信された後、または例外に達したときにホストプログラムが終了する必要があります。

何を意味しますか:「私は理解できない結果を得ています...このコードはエラーなしで実行されています...私が持っている問題は、

どのような結果が得られますか?あなたはdata varをチェックしましたか?

+0

はい、それは問題です。私が受け取った後、 'data' varは空です。何が起こっているのかわかりません。 – Woody1193

+0

Okとc.send()は何の値を返しますか?あなたはPython 3を使用していますか? – JumpAlways

+0

私が知る限り、値は返されていません。私は私のホストマシンでPython 2.7.6を使用しています。アンドロイド(Python 3に対応しています)では2.6.2です。 – Woody1193

関連する問題