2012-03-11 29 views
4

Android搭載のGalaxyタブにsl4aとPythonをインストールしました。私は私のラップトップと私の携帯電話の間で通信するためにPythonのsocketモジュールを使用して問題に遭遇しました。AndroidでのPythonとのソケット通信

このexampleは、コンピュータ専用のPythonプログラムを作成していても、コンピュータ/タブのセットアップでは期待どおりに動作しないときはいつもうまく機能していました。ここで私はタブ上で実行しているコードは次のとおりです。

import socket, android 
droid=android.Android() 
droid.makeToast('Running...') 
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(('', 50111)) 
droid.makeToast('Socket has been bound') 
s.listen(1) 
conn, addr = s.accept() 
droid.makeToast('Connection has been accepted') 

そして、私は(<Tab IP Address>はタブのIPアドレスです)、ラップトップ上で実行していたコード:

import socket 
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(('<Tab IP address>', 50111)) 

socket.error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 

そして、最後のToastメッセージ以外のすべてのスクリプトが表示されます。

私は、www.whatismyip.orgからタブのIPアドレスを取得しています。

ローカルソケットプログラミング(つまり、IPアドレス 'localhost'に接続し、タブでクライアントとサーバーの両方を実行する)はうまくいきます。

私は、hereのガイドを使ってファイルを自分のタブに転送しています。

私のプロジェクトの最後の目標は、自分のラップトップでコマンドを実行して、自分のタブからテキストを送信できるようにすることです。私は解決策はすでに存在すると確信していますが、私はそれを自分で行う方法を学びたいと思います!

EDIT:[Added 21/03/12] Wi-Fiネットワークにタブを接続して192.168.0.xxアドレスを使用すると、上のコードがうまく機能することがわかりました(タブとラップトップ間の通信)。これは、問題はコード自体ではなくタブに接続するために使用しているIPアドレスにあると考えています。私は試し続けます。最善の方法に関するアドバイスは、接続するIPアドレス、または私が作成している可能性のあるエラーを理解していただければ幸いです。 AGAIN

EDIT:this questionthis linkを読んでから、私はスマートフォン(やタブレット)IPアドレスが静的ではありませんので、このような状況では、サーバなどのモバイルデバイスを処理すること、それを行うには間違った方法であると結論しました。私はプログラムの構造を再考するつもりです。 これは相互作用を構造化するのが間違った方法であることを知りましたが、まだそれがなぜ失敗したのか完全に理解していません。私は以前のリンクを読んでから、私がwww.whatismyip.orgから得たIPアドレスは私のタブに固有のものではなく、むしろ私のネットワークプロバイダに属する「バルクIP」であったことから、個々のデバイスに転送されます(ネットワークルーターが接続をネットワーク上の個々のデバイスに転送するのと同じ方法で)。しかし、私はこれを確信しておらず、それを検証する方法について考えることはできません(私と同じネットワーク上の人々を狩る、同じセルエリアに住んでいる人にモバイルIPを求めるのは不十分です)。誰かがこの点を明確にすることができれば、私はとても感謝しています。

答えて

1

あなたは「バルクIP」のことについては正解でした。 wi-fi経由で電話機を接続すると、ルータの使用可能なIPアドレスプールからランダムなIPが取得されます。

ルーターに接続するデバイスの数が一定の場合、通常は同じIPを取得します。たとえば、3台のコンピュータをケーブルと1台のスマートフォンで接続している場合、電話機は常に192.168.1.5 IP(192.168.1.2 - .4 IPが使用されます)を取得します。

ルータに応じて、Wi-Fiに接続するたびにスマートフォンとまったく同じアドレスを与えるようにルータを設定することができます。 www.whatismyip.orgから使用していたIPは、ネットワークが "パブリックインターネット"に到達するために使用するプロバイダのものです(ただしこれは別の話です)。

タブレットにあるローカルIPを確認してください(設定 - > Wi-Fi-> Wi-Fi設定 - >接続を押してください)。

サーバー用のコードに使用する必要があります。

私はこれが助けてくれることを願っています。

+0

@scubboうれしかったです。 –