VPS 上的 python 个套接字出现 winerror 10061
winerror 10061 with python sockets on VPS
我知道这个问题已经有很多话题了,但我仍然找不到好的答案,所以我来了。
我正在使用 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?
提前致谢
有
SERVEUR = socket.getfqdn(socket.gethostname())
ADDR = (SERVEUR, PORT)
server.bind(ADDR)
您告诉 Python 将侦听套接字仅绑定到具有 SERVEUR
本地地址的接口,这可能根本不正确。
相反,如评论中所述,常见选项是
'0'
('0.0.0.0'
的缩写)绑定到所有网络接口(这对于向 Internet 公开服务很有用)
'127.0.0.1'
仅绑定到环回网络接口(这在许多代理情况下很有用)
当然也有只绑定某个接口的情况,但以上两种是常见的情况。
我知道这个问题已经有很多话题了,但我仍然找不到好的答案,所以我来了。
我正在使用 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? 提前致谢
有
SERVEUR = socket.getfqdn(socket.gethostname())
ADDR = (SERVEUR, PORT)
server.bind(ADDR)
您告诉 Python 将侦听套接字仅绑定到具有 SERVEUR
本地地址的接口,这可能根本不正确。
相反,如评论中所述,常见选项是
'0'
('0.0.0.0'
的缩写)绑定到所有网络接口(这对于向 Internet 公开服务很有用)'127.0.0.1'
仅绑定到环回网络接口(这在许多代理情况下很有用)
当然也有只绑定某个接口的情况,但以上两种是常见的情况。