Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OSError:[Errno 107]未连接传输终结点_Python_Sockets - Fatal编程技术网

Python OSError:[Errno 107]未连接传输终结点

Python OSError:[Errno 107]未连接传输终结点,python,sockets,Python,Sockets,我试图学习如何使用python中的套接字在两台计算机之间进行通信。不幸的是,当一切似乎都是对的时候,我却犯了这个错误: OSError:[Errno 107]未连接传输终结点 通过谷歌搜索,我发现这是因为连接可能已断开。但是我在同一台机器上运行程序的客户端和服务器端。我尝试从客户端再次连接,得到以下结果: OSError:[Errno 106]传输终结点已连接 表示上一个连接仍然完好无损。我很困惑到底发生了什么,以及如何让它发挥作用。下面是一个屏幕截图,显示了我正在尝试做的事情和问题: 我在py

我试图学习如何使用python中的套接字在两台计算机之间进行通信。不幸的是,当一切似乎都是对的时候,我却犯了这个错误:

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

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

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

表示上一个连接仍然完好无损。我很困惑到底发生了什么,以及如何让它发挥作用。下面是一个屏幕截图,显示了我正在尝试做的事情和问题:


我在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!")