0

質問

error: [Errno 57] Socket is not connectedソケットを初期化したのにを受け取るのはなぜですか? 完全なコードはpaste binにありますが、ここで提供したものを自由にチェックしてください。

バックグラウンド

ソケット サーバーの基本的な GUI を作成しています。スクリプトの 2 つの部分 (GUI とサーバー) の通信に問題があります。サーバー部分は機能的に書かれていますが、Tkinter GUI は OOP です。GUI は、実行するサーバーの一部を呼び出します。send_msgサーバーは完璧ですが、 (ソケットを使用してメッセージを送信する)関数を呼び出すたびに、エラーが発生します。

[Errno 57] Socket is not connected

コード

メソッドではGUI __init__、関数を呼び出しstart_up()ます。関数はソケットを開き、それぞれのアドレスにバインドします。関数は次のとおりです。

def start_up():
    HOST = socket.gethostname()
    PORT = 2468

    print "HOST: %s" % (HOST)
    print "PORT: %s" % (PORT)
    print "\n"
    print "-------------------------"
    print "\n"
    global s
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM )
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    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"
    """
    So by specifying 10, it means that if 10
    connections are already waiting to be processed,
    then the 11th connection request shall be rejected.
    This will be more clear after checking socket_accept.
    """
    s.listen(10)
    print "Socket now listening"

self.sendボタンを押すたびに、メソッドが呼び出され、class_send_msgメソッドがsend_msg(s)関数を呼び出します。send_msgコードは次のとおりです。

def send_msg(s):
    #Send some data to the remote server
    message = app.message.get("0.0", END)


     #set the whole string
    s.sendall(message)
    myHistory = open("history.txt", "a+")
    myHistory.write(message)

最後に、受け取ったコンソール メッセージ (トレースバック付き):

HOST: ****.local
PORT: 2468


-------------------------


Socket Created
Socket Bind Complete
Socket now listening
Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "/Volumes/****'S USB/Python Programs/Sockets/IM Project/Server/Server GUI InDev Class.py", line 160, in class_send_msg
    send_msg(s)
  File "/Volumes/****'s USB/Python Programs/Sockets/IM Project/Server/Server GUI InDev Class.py", line 97, in send_msg
    s.sendall(message)
  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 57] Socket is not connected
4

1 に答える 1

2

"s" はリスニング ソケットです。このソケットは新しい接続を受け入れるだけです。このソケットでデータを送信しないでください。

s.accept() の呼び出しから取得したソケットである「接続」でデータを送信する必要があります。

これを実現するには、コードを再構築する必要がある場合があります。

于 2013-03-24T20:10:29.673 に答える