1

Pythonソケットのこの紹介を読みました: http://docs.python.org/3.3/howto/sockets.html

これは私のサーバーです

import socket
serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serversocket.bind(("localhost",8000))
serversocket.listen(5)
while True:
    (client,addr)=serversocket.accept()
    data=serversocket.recv(1024)
    print(data.decode("utf-8"))

そしてこれがクライアントです

import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost",8000))

サーバーは、クライアントから送信されたすべてのデータを印刷するだけです。ご覧のとおり、メッセージ文字列を utf-8 でバイトとしてエンコードするつもりでした。しかし、私はそこまで来たことはありません。

サーバー スクリプトを実行した状態で、クライアントの行を 1 つずつ IDLE Python シェルに入力しました。3行目以降、このエラーが表示されました。私はドイツ人なので、これはあいまいな翻訳です。エラーを再現できる場合、エラー メッセージはおそらく異なるように聞こえます。

トレースバック (最新の最後の呼び出し): ファイル ""、1 行目、s.connect(("localhost",8000)) 内 OSError: [WinError 10056] 既に接続されているソケットを対象とした接続試行。

このエラーを解決するにはどうすればよいですか? サーバーはわずかに変更されていますが、クライアントはチュートリアルの正確なコードです。そして、エラーはかなり奇妙に見えます。結局のところ、ソケットがすでにサーバーに接続されている必要があります。最初は、サーバーに接続されているソケットがすでにあると思っていましたが、サーバーを再起動してクライアントコードを再度入力すると、同じ結果になります。

4

2 に答える 2

2

クライアント ソケットで受信し、クライアントが閉じるときにクライアント ソケットを閉じます。これは一度に 1 つのクライアントを処理しますが、デコードする完全なメッセージがあることを認識するためにメッセージ プロトコルを実装する必要があることに注意してください。

import socket
serversocket = socket.socket()
serversocket.bind(('',8000))
serversocket.listen(5)
while True:
    client,addr = serversocket.accept()
    while True:
        data = client.recv(1024)
        if not data: break
        print(data.decode('utf8')) # Note this might not contain a complete UTF-8 character.
    client.close()
于 2013-05-14T21:33:36.637 に答える