簡體   English   中英

蟒蛇| 使用套接字連接到遠程服務器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM