如何解决winerror 10061 在 VPS 上使用 python 套接字
我知道已经有很多关于这个问题的主题,但我仍然找不到任何好的答案,所以我在这里。
我使用 Python3 在主机和服务器之间进行通信。两台本地机器之间一切正常,我决定将服务器端放在 VPS 上。从那时起,我每次尝试连接时都会收到此错误:
ConnectionRefusedError: [Winerror 10061] No connection could be made because the target machine actively refused it
我禁用了 vps 防火墙,更改了端口、连接目标和所有内容。我试图 nmap 端口,我得到了这个结果:
这是我的客户端代码:
import socket
HEADER = 64
PORT = 40000
FORMAT = 'utf-8'
DECONNEXION = "!DECONNEXION"
SERVER = "vps-xxxxxxxx.vps.ovh.net"
ADDR = (SERVER,PORT)
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(ADDR)
def envoyer(msg):
message = msg.encode(FORMAT)
message_longueur = str(len(message)).encode(FORMAT)
message_longueur += b' '*(HEADER-len(message_longueur))
client.send(message_longueur)
client.send(message)
print(client.recv(2048).decode(FORMAT))
def communication():
while (True):
envoyer(input())
communication()
服务器:
#!/usr/bin/python3
import socket
import threading
HEADER = 64
PORT = 40000
SERVEUR = socket.getfqdn(socket.gethostname())
ADDR = (SERVEUR,PORT)
FORMAT = 'utf-8'
DECONNEXION = "!DECONNEXION"
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(ADDR)
def handle_client(conn,addr):
print("[NOUVELLE CONNEXION] :",addr)
message=""
connecte = True
while connecte:
longueur_message = conn.recv(HEADER).decode(FORMAT)
if(longueur_message):
longueur_message = int (longueur_message)
message = conn.recv(longueur_message).decode(FORMAT)
print("[",addr,"] : ",message)
conn.send("Message reçu !".encode(FORMAT))
if "!DECONNEXION" in message:
connecte = False
conn.close()
def start():
server.listen()
print("[STATUT] Serveur démarré sur",SERVEUR,":",PORT )
while True:
conn,addr = server.accept()
thread = threading.Thread(target=handle_client,args=(conn,addr))
thread.start()
print("[CONNEXIONS] ",threading.active_count() -1 )
print("[STATUT] Le serveur démarre... ")
start()
但正如我所说,这段代码在本地工作。 OVH 是否有自己的时髦防火墙阻止了 tcp 端口 40000? 提前致谢
解决方法
与
sku
您告诉 Python 将侦听套接字仅绑定到具有 SERVEUR = socket.getfqdn(socket.gethostname())
ADDR = (SERVEUR,PORT)
server.bind(ADDR)
本地地址的接口,这可能根本不正确。
相反,如评论中所述,常用选项是
-
SERVEUR
('0'
的缩写)绑定到所有网络接口(这对于向 Internet 公开服务很有用) -
'0.0.0.0'
仅绑定到环回网络接口(这在许多代理情况下很有用)
当然,也有你只想绑定某个接口的情况,不过以上两种是常见的情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。