Python OSError:[Errno 107]未连接传输终结点
我试图学习如何使用python中的套接字在两台计算机之间进行通信。不幸的是,当一切似乎都是对的时候,我却犯了这个错误: OSError:[Errno 107]未连接传输终结点 通过谷歌搜索,我发现这是因为连接可能已断开。但是我在同一台机器上运行程序的客户端和服务器端。我尝试从客户端再次连接,得到以下结果: OSError:[Errno 106]传输终结点已连接 表示上一个连接仍然完好无损。我很困惑到底发生了什么,以及如何让它发挥作用。下面是一个屏幕截图,显示了我正在尝试做的事情和问题:Python OSError:[Errno 107]未连接传输终结点,python,sockets,Python,Sockets,我试图学习如何使用python中的套接字在两台计算机之间进行通信。不幸的是,当一切似乎都是对的时候,我却犯了这个错误: OSError:[Errno 107]未连接传输终结点 通过谷歌搜索,我发现这是因为连接可能已断开。但是我在同一台机器上运行程序的客户端和服务器端。我尝试从客户端再次连接,得到以下结果: OSError:[Errno 106]传输终结点已连接 表示上一个连接仍然完好无损。我很困惑到底发生了什么,以及如何让它发挥作用。下面是一个屏幕截图,显示了我正在尝试做的事情和问题: 我在py
我在python 3.5.0上对您的代码进行了一点修改,测试结果如下: 我认为关键在于
sock.accept()
方法,它返回一个元组:
socket.accept()接受连接。套接字必须绑定到
地址和侦听连接。返回值是一对
(conn,address)其中conn是一个新的套接字对象,可用于发送和
接收连接上的数据,地址是绑定到的地址
连接另一端的插座
服务器
客户:
我也遇到了同样的错误,我意识到这是因为一个小问题:在
handle\u client
函数中,我将server.recv
而不是conn.recv
,因此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()
import socket
import threading
def send(msg):
client.send(str(len(msg)).encode('utf-8').ljust(64))
client.send(msg.encode('utf-8'))
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((socket.gethostbyname(socket.gethostname()), 5050))
send("Hello world!")
client.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()
import socket
import threading
def send(msg):
client.send(str(len(msg)).encode('utf-8').ljust(64))
client.send(msg.encode('utf-8'))
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((socket.gethostbyname(socket.gethostname()), 5050))
send("Hello world!")