2016-03-20 149 views
1

私はPython3でチャットしようとしています。ここに私のコードは次のとおりです。python3 OSError:[Errno 107]トランスポートエンドポイントが接続されていません

import socket 
import threading 

print("Server starts working") 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.bind(("", 57054)) 
sock.listen(2) 

conn, addr = sock.accept() 


def get_message(): 
    while True: 
     data = sock.recv(1024).decode() 
     if len(data) != 0: 
      print("Some guy: ", data) 


def send_message(): 
    while True: 
     message = input() 
     if len(message) != 0: 
      message = str.encode(message) 
      sock.send(message) 
      print("You: ", message) 


def run(): 
    get_message_thread = threading.Thread(target=get_message()) 
    send_message_thread = threading.Thread(target=send_message()) 

    get_message_thread.daemon = True 
    send_message_thread.daemon = True 

    get_message_thread.start() 
    send_message_thread.start() 


run() 

sock.close() 

しかし、私はエラーメッセージを取得し、実行した後や、他のクライアントからメッセージを送信:私が読んだ

Server starts working 
Traceback (most recent call last): 
    File "/home/ptrknvk/Documents/Study/Python/chat/chat.py", line 40, in <module> 
    run() 
    File "/home/ptrknvk/Documents/Study/Python/chat/chat.py", line 30, in run 
    get_message_thread = threading.Thread(target=get_message()) 
    File "/home/ptrknvk/Documents/Study/Python/chat/chat.py", line 15, in get_message 
    data = sock.recv(1024).decode() 
OSError: [Errno 107] Transport endpoint is not connected 

Process finished with exit code 1 

、sock.acceptといくつかの問題があること()、しかし、私は思うように、ここではすべて大丈夫です。

+0

「ターゲット」には括弧を使用しないでください。 'threading.Thread(target = get_message)'に変更する 'threading.Thread(target = get_message())'を使うと、 'get_message()'が 'get_message'ではなくターゲットとして返すものを使用しています。 'send_message'で同じことをする必要があります。 – zondo

答えて

1

プログラムには多くの欠陥があります。 zondoが述べたように、あなたは間違ってターゲットを渡しています。彼らはthreading.Thread(target = get_message)のようにすべきです。第2の問題は、データの送受信にconn(ソックスではない)を使用することです。 3番目の問題は、メインスレッドがaccept呼び出しでブロックしていて、接続を待つことです。しかし、すぐに接続を受け入れると、それは終了します。メインスレッドから、get_message_threadとsend_message_threadを待つ必要があります。

import socket 
import threading 

print("Server starts working") 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.bind(("", 57054)) 
sock.listen(2) 

conn, addr = sock.accept() 


def get_message(): 
    while True: 
     data = conn.recv(1024).decode() 
     if len(data) != 0: 
      print("Some guy: ", data) 


def send_message(): 
    while True: 
     message = input() 
     if len(message) != 0: 
      message = str.encode(message) 
      conn.send(message) 
      print("You: ", message) 


def run(): 
    get_message_thread = threading.Thread(target=get_message) 
    send_message_thread = threading.Thread(target=send_message) 

    get_message_thread.daemon = True 
    send_message_thread.daemon = True 

    get_message_thread.start() 
    send_message_thread.start() 
    get_message_thread.join() 
    send_message_thread.join() 

run() 

sock.close() 
+0

ありがとうございます –

関連する問題