bugfix> python > 投稿

サーバーと通信し、データを取得し、サーバーにデータを送信するpythonスクリプトを作成しました。これは、ある種の「エコークライアント」です。

これは私が書いたものです:

import socket
import time
def netcat(hostname, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((hostname, port))
    s.shutdown(socket.SHUT_WR)
    while 1:
        data = s.recv(1024)
        if data == "":
            break
        print "Received:", repr(data)
        data = data.replace("\n", "")
        time.sleep(1)
        s.sendall(data)
        print "Sent:", data
    print "Connection closed."
    s.close()
netcat("127.0.0.1", 4444)

私はこの出力を取得します:

Received: 'Welcome!\n'

そしてその後、私はこのエラーを受け取ります:

Traceback (most recent call last):
  File "client.py", line 22, in <module>
    netcat("127.0.0.1", 4444)
  File "client.py", line 17, in netcat
    s.sendall(data)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 32] Broken pipe

オンラインでこのエラーの解決策を探していましたが、運がありません。

誰かが私がそれを理解するのを助けてくれますか?

ありがとうございました

回答 1 件
  • 私は最近ソケットに取り組んでいます。コードをテストするためのサーバーが現在ないので、表示されている内容についてすぐにコメントすると思いました。最初はソケットを(書き込み用に)シャットダウンしているように見えるため、受信ステートメントは機能しましたが、sendallステートメントは失敗します。

    def netcat(hostname, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((hostname, port))
        s.shutdown(socket.SHUT_WR) <-- WHY IS THIS HERE?
    
    

あなたの答え