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

时间:2015-12-13 08:11:39

标签: python sockets

我正在尝试学习如何在python中使用套接字在两台计算机之间进行通信。不幸的是,当一切似乎都正确时,我会收到此错误:

  

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

通过谷歌搜索,我发现这是因为连接可能已经丢失。但是我在同一台机器上运行程序的客户端和服务器端。我尝试从客户端再次连接,我得到了这个:

  

OSError:[Errno 106]传输端点已连接

表示先前的连接仍然完好无损。我对发生的事情以及如何使其发挥作用感到非常困惑。这是一个屏幕截图,显示了我想要做的事情和问题:

enter image description here

2 个答案:

答案 0 :(得分:18)

我在python 3.5.0上进行了一些改动测试了你的代码,它的工作原理如下: 我认为诀窍是在sock.accept()方法中返回一个元组:

  

socket.accept()接受连接。套接字必须绑定到   地址和侦听连接。 返回值是一对   (conn,address)其中conn是一个可用于发送和的新套接字对象   接收连接数据,地址是绑定的地址   连接另一端的套接字。

服务器

#server
>>> import socket
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> sock.bind(("localhost", 8081))
>>> sock.listen(2)
>>> conn, addr = sock.accept()
>>> data= conn.recv(1024).decode("ascii") 

的客户端:

#client
>>> import socket
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> sock.connect(("localhost",8081))
>>> sock.send("hi".encode())
2
>>> sock.send("hiiiiiii".encode())
8
>>> sock.send(("#"*1020).encode())
1020

答案 1 :(得分:0)

我遇到了同样的错误,我意识到这是因为一个小问题:在 handle_client 函数中,我使用了 server.recv 而不是 conn.recv,所以 { {1}} 程序正在尝试从其自身接收数据。

以下是更正后的版本:

server.py

server.py

import socket import threading def handle_client(conn, addr): while True: msg_length = conn.recv(64).decode("utf-8") # I got the error when I put server.recv if msg_length: msg = conn.recv(int(msg_length)).decode('utf-8') # Here too print(msg) def start(): server.listen() while True: conn, addr = server.accept() thread = threading.Thread(target=handle_client, args=(conn, addr)) thread.start() server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((socket.gethostbyname(socket.gethostname()), 5050)) start()

client.py