python3 OSError:[Errno 107]传输端点未连接

时间:2016-03-20 12:54:01

标签: python sockets python-3.x

我尝试在Python3上聊天。这是我的代码:

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()存在一些问题,但我认为一切都在这里。

1 个答案:

答案 0 :(得分:1)

你的程序有很多缺陷。正如zondo所提到的,你错误地传递了目标。它们应该像threading.Thread(target = get_message)。第二个问题是,您应该使用conn(而不是sock)来发送和接收数据。第三个问题是,主线程在接受调用时阻塞,并将等待连接。但是一旦接受连接,它就会退出。从主线程中,您应该等待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()