Python连接被拒绝错误:[Errno 61] 连接被拒绝。

12

我看到了类似的问题,但是我无法解决这个错误。我和我的朋友正在制作一个聊天程序,但我们一直出现错误 ConnectionRefusedError: [Errno 61] Connection refused。顺便说一下,我们处于不同的网络中。以下是我服务器端的代码:

import socket

def socket_create():
try:

    global host
    global port
    global s
    host = ''
    port = 9999
    s = socket.socket()

except socket.error as msg:
    print("Socket creation error" + str(msg))

#Wait for client, Connect socket and port
def socket_bind():
try:
    global host
    global port
    global s
    print("Binding socket to port: " + str(port)) 
    s.bind((host, port))
    s.listen(5)
except socket.error as msg:
    print("Socket binding error" + str(msg) + "\n" + "Retrying...")
    socket_bind

#Accept connections (Establishes connection with client) socket has to       be listining
def socket_accept():
   conn, address = s.accept()
   print("Connection is established |" + " IP:" + str(address[0]) + "|    port:" + str(address[1]))
chat_send(conn)


def chat_send(conn):
 while True:
    chat =input()
    if len(str.encode(chat)) > 0:
        conn.send(str.encode(chat))
        client_response = str(conn.recv(1024), "utf-8")
    print(client_response)
def main():
socket_create()
socket_bind()
socket_accept()

main()

以及我的客户端代码

import socket


#connects to server
s = socket.socket()
host = '127.0.0.1'
port = 9999
s.connect((host, port))

#gets chat
while True:
    data = s.recv(1024)
    print (data[:].decode("utf-8")) 
    chat = input()
    s.send(str.encode(chat))

你能否链接你的“类似”问题? - Charlie Parker
7个回答

13

这可能不是您最初的问题的答案,但我遇到了这个错误,原因很简单,我没有首先启动服务器进程以侦听本地主机(127.0.0.1)上我选择测试的端口。为了让客户端连接到本地主机,必须有一个服务器在本地主机上进行监听。


很好的回答!我也曾经遇到过同样的问题,忘记先启动服务器(或先运行客户端)。 - Charlie Parker

6

'127.0.0.1'指本地计算机-因此客户端与同一计算机上的服务器连接。客户端必须使用来自服务器的IP,如192.168.0.1

在服务器上检查:

在 Windows 中(在 cmd.exe 中)

ipconfig

在Linux上(在控制台中)
ifconfig

如果你在不同的网络中,它可能无法正常工作。 ipconfig/ifconfig 返回本地 IP(例如 192.168.0.1),仅在本地网络中可见。然后,您可能需要外部 IP 和设置(重定向)在您和提供者路由器上。外部 IP 可以是您的路由器或提供商路由器的 IP。当你访问像这样的页面时http://httpbin.org/ip,你可以看到自己的外部 IP。但这可能还需要一些调整,并且可能会成为更大的问题。


谢谢!那对我有效。 - undefined

1

首先,您只需要启动服务器,然后运行客户端代码。 在VS Code中,我已经打开了两个终端。一个用于运行While True的服务器代码,另一个用于运行客户端代码。


0

所以这可能不能直接解决你的问题,但它解决了我的问题,并且可以帮助其他与我一起使用vscode的人。我使用了一些扩展来运行我的代码,所以当你想要运行服务器时,请在CMD或终端上运行它,然后在vscode中运行客户端,这对我很有帮助(也许重要的是,我在Mac上工作,所以可能是特定的操作系统问题)。


0

我也遇到过这个问题。尝试在设置中检查您的IP地址,并在代码中更改您的IP地址。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community
这并没有真正回答这个问题。如果您有不同的问题,可以点击[提问](https://stackoverflow.com/questions/ask)来提出。要在此问题有新的答案时得到通知,您可以[关注此问题](https://meta.stackexchange.com/q/345661)。一旦您拥有足够的[声望](https://stackoverflow.com/help/whats-reputation),也可以[添加悬赏](https://stackoverflow.com/help/privileges/set-bounties)以吸引更多注意力至该问题。- 来自审核 - valentinmk

0
如果您连接到一个打开的主机:端口,但没有服务绑定到它,您可能会看到这个消息。例如,使用ssh时,有时在尝试连接到正在启动但sshd未运行的服务器时会出现这种情况。

-3

此代码不适用于聊天,您需要使用非阻塞套接字select模块或其他异步模块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接