[英]Python | Connecting to a remote server using sockets
最近我一直在處理 python 中的套接字,我需要連接到一個項目的遠程服務器。 我知道關於這個主題有很多問題,但沒有一個解決方案對我有用,如果我不能讓它工作,我會發瘋。
服務器代碼:
import socket
import threading
FORMAT = "UTF-8"
PORT = 55555
SERVER = ''
ADDR = ('0.0.0.0', PORT)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADDR)
def handle_client(conn, addr):
print(f"[NEW CONNECTION] {addr} connected.")
conn.send("Test".encode(FORMAT))
def start():
server.listen()
print(f"[LISTENING] Server is listening on {PORT}")
while True:
connection, adress = server.accept()
thread = threading.Thread(target=handle_client, args=(connection, adress))
thread.start()
print(f"[ACTIVE CONNECTIONS] {threading.activeCount() - 1}")
print("[STARTING] server is starting...")
start()
客戶代碼:
import socket
import threading
FORMAT = "UTF-8"
PORT = 55555
SERVER = "xx.xxx.xxx.xxx" # public ip
print(f"\nconnecting... {PORT}\n")
ADDR = (SERVER, PORT)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
client.connect(ADDR)
except:
print("Couldnt connect.")
print(client.recv(1024).decode(FORMAT))
當我將客戶端腳本中的 SERVER 變量更改為我的本地 ip (192.168.1.34) 時,我可以在同一局域網中的兩台不同電腦上運行這兩個腳本,並且運行良好,我在我的客戶端電腦中收到“測試”消息。
但是,當我將 SERVER 變量更改為我的公共 ip 並在我的服務器 pc 中運行服務器時,我無法連接到客戶端 pc。 在這里,我的服務器和客戶端電腦不在同一個網絡中。 服務器連接到我的路由器,而客戶端在另一個網絡中。 當我運行客戶端腳本時什么也沒有發生,過了一會兒我得到 [WINERROR 10057]
我已經完成了到端口 55555 的端口轉發。我嘗試禁用所有防火牆,甚至在 Windows 防火牆中創建一個新規則以允許來自端口 55555 的連接。它仍然不起作用,我不知道為什么。
如果有人可以在這里看到問題,我將不勝感激。
我能看到的唯一可能導致問題的是您的 ADDR 變量。 我最近做了一個成功的類似項目,在我的服務器代碼中,我做了相當於:
ADDR('',PORT)
我不確定這會解決您的問題,但這是我從您提供的信息中最好的猜測。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.