我见过类似的问题,但我无法修复此错误。我和我的朋友正在制作一个聊天程序,但我们不断收到错误 ConnectionRefusedError: [Errno 61] 连接被拒绝 顺便说一句,我们在不同的网络上。 这是我的服务器代码
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))
这可能无法回答您原来的问题,但我遇到了这个错误,这只是因为我没有首先启动服务器进程来监听我选择测试的端口上的本地主机(127.0.0.1)。为了让客户端连接到本地主机,服务器必须侦听本地主机。
'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。当您访问这样的页面时,您可以看到您的外部 IP http://httpbin.org/ip 。但它仍然需要一些工作,而且这是一个更大的问题。
您只需首先启动服务器,然后运行客户端代码。 在 VS Code 中我打开了 2 个终端。一个用于运行 server_code
While True
,另一个用于 client_code
所以这可能不会具体解决你的问题,但它解决了我的问题,它可以帮助我使用 vscode 的其他人,我使用一些运行我的代码的扩展,所以当你想运行你的服务器时,在你的 CMD 或终端上运行它并运行你的vscode 中的客户端它帮助了我(也许重要的是我在 mac 上工作,所以可能是特定的操作系统问题)
如果您连接到打开的主机:端口,但没有绑定任何服务,您可能会看到此 IIRC。例如,使用 ssh,您有时会在尝试连接到正在启动但 sshd 未运行的服务器时看到此情况。
这也发生在我身上。尝试在设置中检查您的 IP 地址并在代码中更改您的 IP 地址。
此代码对于聊天无效,您必须使用解除阻塞套接字和select模块或其他异步模块