Python Socket: 目标机器主动拒绝连接

Python Socket: the target machine actively refused the connection

我正在尝试创建一个包含计算机网络的系统,其中有一个主机和多个从机。主设备将通过套接字发送命令,从设备将响应命令。 我找到了一个有用的 material here 并且它起作用了。我能够发送数据并接收答案。

所以我决定为它创建一个 class 来拥有服务器和客户端对象。当我创建服务器和客户端对象时,客户端对象工作正常。但是服务器对象虽然看起来可以正常工作,但它拒绝连接。

ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

这是我的 class:

import socket
from _thread import start_new_thread

class Communicator:
    class Server:
        def __init__(self, port, max_trans_length=128, logger=None):
            self.logger = logger or getLogger("dummy")
            self.port = port
            self.ServerSocket = socket.socket()
            self.mtl = max_trans_length
            self.ThreadCount = 0
            self.ServerSocket.bind((socket.gethostname(), self.port))

        def threaded_client(self, connection):
            connection.send(str.encode('Welcome to the Server'))
            while True:
                data = connection.recv(self.mtl)
                reply = f"Received: {data.decode('utf-8')}"
                if not data:
                    break
                connection.sendall(str.encode(reply))
            connection.close()

        def listen(self):
            print('Waiting for a Connection..')
            self.ServerSocket.listen(5)
            while True:
                Client, address = self.ServerSocket.accept()
                print('Connected to: ' + address[0] + ':' + str(address[1]))
                start_new_thread(self.threaded_client, (Client,))
                self.ThreadCount += 1
                print('Thread Number: ' + str(self.ThreadCount))
            self.ServerSocket.close()

    class Client:
        def __init__(self, host, port, max_trans_length=128, logger=None):
            self.logger = logger or getLogger("dummy")
            self.host = host
            self.port = port
            self.mtl = max_trans_length
            self.ClientSocket = socket.socket()
            print('Waiting for connection')
            self.ClientSocket.connect((host, port))
            _ = self.ClientSocket.recv(self.mtl)

        def transmit(self, data):
            self.ClientSocket.send(str.encode(data))
            response = self.ClientSocket.recv(self.mtl)
            print(response.decode('utf-8'))

        def disconnect(self):
            self.ClientSocket.close()

这是我得到的:

我在使用 Linux 机器时遇到类似的错误。

所以经过大量的搜索,我found out socket.gethostname()限制收听。 用黑色字符串或“127.0.0.1”更改它解决了我的问题。