2017-04-13 13 views
0

私はserver.pyとclient.pyを持っています。pythonが同じネットワーク上のサーバに接続する

127.0.0.1と同じポートとホストを使用して同じコンピュータでそれらを実行すると、正常に動作します。

別のノートパソコンを同じネットワークに接続しました。私は自分のローカルIPアドレス129.94.209.9を取得し、それをサーバーに使用しました。他のノートパソコンではサーバーに接続しようとしましたが、できませんでした。

これは私のコードに問題がありますか、ネットワークに問題がありますか、間違ったIPアドレスを使用していますか?

Server.py

HOST = '129.94.209.9' 
PORT = 9999 
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
server_socket.bind((HOST, PORT)) 
server_socket.listen(10) 
sockfd, addr = server_socket.accept() 
send and receive messages etc.... 

Client.py

HOST = '129.94.209.9' 
PORT = 9999 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
try: 
    sock.connect((HOST, PORT)) 
except: 
    print("Cannot connect to the server") 
send and receive messages etc... 

クライアントのプリントが

おかげで "サーバーに接続できません" !!

アップデート:私はそれを追加するのを忘れて申し訳ありませんコメント

1)私は数sockfdを行いました、ADDR = server_socket.accept()のためのおかげで、それは数行さらに下のコードでいました。

2)エラーがある:[エラー番号11]一時的に利用できないリソース

3)pingは

EDITの動作が行われます。私は同じネットワークへのイーサネットケーブルでの両方のコンピュータを接続したときは今働いています。彼らがWi-Fiに接続されたお互いにすぐ隣にいるとき、なぜ私のtheはうまくいかないのか分かりません。 すべての提案をありがとう!私は自分自身でネットワークの問題を調査します

+0

最初にあなたが 'try' /' except'または実際のエラーメッセージを参照するには、再調達exceptinを削除する必要があります。 –

+0

'except:'を 'Exception as ex:'のように変更しようとしましたか?これにより、 'print(ex)'で例外のより良い説明を見ることができ、より多くの情報を提供することができます –

+0

あるマシンから別のマシンへの 'ping 'は動作しますか? –

答えて

1

次のコードを使用して(私のIPアドレスではなくあなたの、もちろん)私は予想される動作を参照してください。

so8srv.py:

import socket 
HOST = '192.168.33.64' 
PORT = 9999 
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
server_socket.bind((HOST, PORT)) 
server_socket.listen(10) 
print("Listening") 
s = server_socket.accept() 
print("Connected") 

so8cli.py:私はそれを実行すると

import socket 
HOST = '192.168.33.64' 
PORT = 9999 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
try: 
    sock.connect((HOST, PORT)) 
except Exception as e: 
    print("Cannot connect to the server:", e) 
print("Connected") 

、サーバは"Listening"を出力します。クライアントを実行すると、クライアントとサーバーの両方で"Connected"が印刷されます。

あなたのコードと違って、私のクライアントは発生した例外に対して同じ診断をプリントするのではなく、例外を報告することに気づくでしょう。練習問題として、except節は避けてください。例外はプログラミングエラーまたはユーザアクション(KeyboardInterruptなど)に起因するかどうかにかかわらず、プログラムは同じアクションをとるためです。

+0

ありがとうございます。私たちのコードはすべて良かったように見えますが、私のワイヤレスアクセスポイントやルータは何か悪いことをしていたにちがいありません。 WiFiよりもイーサネットケーブルを使用してラップトップを接続するとうまくいきます – Friedpanseller

0

また、IPアドレスを取得するためにこの構造を使用してみてください:

HOST=socket.gethostbyname(socket.gethostname()) 
+0

これはローカルホストアドレスを返すことになります。 – holdenweb

+0

これに注意してください。あるマシンでは、 'gethostbyname()'と別の "0.0.0.0"が必要です。そうでなければ、2つの間の接続は失敗します –

+0

それは真実ではなく、カーゴカルト情報のように聞こえます。 '' 0.0.0.0''は_all available_インターフェイスでリッスンするためにサーバーソケットで使用されます。 IPアドレスで指名された1つのインターフェイスだけでリッスンすることは完全に有効です。ホスト名はまったく使用する必要は全くありません。単に人間の利便性に過ぎません。 – holdenweb

関連する問題