Python 2.7.xで基本的なクライアントサーバーソケットプログラムを作成しました。異なるマシンでも同じネットワーク上で完全に正常に実行されていますが、サーバーとクライアントを異なるネットワークで実行すると(私のクライアントが私の友人のネットワーク)それはエラーを返さず、待ち続けます。コードをデバッグする方法が理解できません。ポート80のすべてのサービスを強制終了してポート80を使用しています。ポートも実行しました。両方のマシンのポート80で転送します。
私のコードは次のとおりです。
client.py
import socket
s = socket.socket()
Host = '103.47.59.130'
port = 80
s.connect((Host, port))
while True:
print "From Server: ", s.recv(1024) #This gets printed after sometime
s.send(raw_input("Client please type: "))
s.close()
server.py
import socket
s = socket.socket() # Create a socket object
Host = '192.168.0.104' #private ip address of machine running Fedora
port = 80
s.bind((Host, port))
s.listen(5)
c, addr = s.accept()
print 'Got connection from', addr #this line never gets printed
while True:
c.send(raw_input("Server please type: "))
print "From Client: ", c.recv(1024)
c.close()
**サーバーから:**を出力することがありますが、メッセージを送受信しません。
PS:以前にStack Overflowで検索しましたが、関連するものが見つかりません。
これを使用して ソフトウェア ポートフォワーディングを実装します。 80などの非常に一般的に使用されるポートの使用に関連する問題を防ぐために、サーバーに別のポート(5006など)を使用することをお勧めします。基本的に、ソフトウェアは次のように機能します。
したがって、クライアントが行う必要があるのは、サーバーのパブリックIP、特にポート5001にデータを送信することだけです。もちろん、このデータは最初にルーターに到着し、ルーターは構成されたとおりに動作し、すべてをサーバーのポート5006に転送します。インターネットゲートウェイがポート転送をサポートしている場合にのみ機能します。
クライアント:
import socket
s = socket.socket()
Host = '103.47.59.130'
port = 5001
s.connect((Host, port))
while True:
try:
print "From Server: ", s.recv(1024)
s.send(raw_input("Client please type: "))
except:
break
s.close()
サーバ:
import socket
s = socket.socket() # Create a socket object
Host = '192.168.0.104' #private ip address of machine running Fedora
port = 5006
s.bind((Host, port))
s.listen(5)
c, addr = s.accept()
print 'Got connection from', addr
while True:
c.send(raw_input("Server please type: "))
print "From Client: ", c.recv(1024)
c.close()
サーバーでパブリックIPアドレスまたは0.0.0.0
を使用し、モデム/ルーターが指定されたポート(通常はポート転送と呼ばれる)での着信接続を許可していることを確認する必要があります。
それが役に立てば幸い!
基本的なネットワークのトラブルシューティングを実行する必要があるようです。あなたの説明によると、自分のネットワーク上の他のマシンには接続できますが、別のネットワーク上のマシンには接続できません。他のネットワーク上のマシンで同じ種類のテストを試すことができます。それは、それ自体のネットワーク上の他のマシンに接続できますか、ネットワーク外の他のマシンに接続できますか。
非常に価値のあるツールには、ping、tracepath、tcpdump、およびnc(netcat)が含まれます。
最終的に、netcatとの接続が可能であれば、問題はコードにあると見なすことができますが、それができない場合は、ネットワークの問題を見つけることができます。