0

現在、基本的な LAN ソケット サーバーを作成しようとしています。これは、同じコンピューターでクライアントとサーバーの両方を使用する場合に正しく動作します。クライアントとサーバーを 2 台のコンピューター (Mac と Windows) で使用しようとすると、クライアント側で一貫して接続が拒否されます。これが私のMacで発生したエラーです:

Traceback (most recent call last):
File "/Users/*****/Desktop/Client V2.py", line 31, in <module>
s.connect((host, port))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py",
line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 61] Connection refused

私のウィンドウでも同じエラーが発生しましたが、番号だけが異なっていました。着信接続と発信接続の両方で Windows ファイアウォールをオフにしましたが、実際の問題が何であるかについて混乱しています。ポート用に作成したコードは次のとおりです。

クライアント

#Get host and port info to connect
host = 'localhost'
port = input ("What is the PORT number?")

これらの行が必要かどうかはわかりませんが、おそらく問題の根本原因です。

try:
    remote_ip = socket.gethostbyname(host)

except socket.gaierror:
    #could not resolve
    print "Hostname could not be resolved. Exiting"
    sys.exit()

最後に、接続する実際のコードです。(私は socket と呼びましたs) s.connect((host, port))

サーバ

HOST = 'localhost' #Symbolic name meaning all available interfaces

PORT = input ("Enter the PORT number (1 - 10,000)")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Socket Created"

try:
    s.bind((HOST, PORT))
except socket.error, msg:
    print "Bind failed. Error Code : " + str(msg[0]) + " Message " + str(msg[1])
    sys.exit()
print "Socket Bind Complete"


s.listen(10)
print "Socket now listening"

私は本当にばかげたことをしたと確信していますが、誰かが私の間違いが何であるかを教えてもらえますか (または、これがクロス OS の可能性があるかどうか)。私はすでにここに投稿しましたが、誰も応答しませんでした。他にもいくつか質問があります。誰かがそれらに答えてくれるとうれしいです。

4

1 に答える 1

1
HOST = 'localhost' #Symbolic name meaning all available interfaces

「利用可能なすべてのインターフェイス」を意味するのではなく、同じコンピューターで実行されているプログラムにのみ表示される特別なインターフェイスを介したローカル マシンのみを意味します。

HOST = '0.0.0.0' #Symbolic name meaning all available interfaces

は、利用可能なすべてのネットワーク インターフェイスを意味します。もちろん、特定のネットワーク インターフェイスにバインドすることもできます。その場合は、その IP アドレスをフィールドに入力するだけです。

于 2013-02-10T01:05:13.843 に答える