我正在嘗試使用套接字庫創建一個點對點 python 應用程式。我很想知道是否有任何方法可以使用套接字庫連接到本地網路之外的另一臺計算機,而無需任何手動步驟,例如打開路由器上的埠以進行埠轉發。我是否需要使用路由器上已經打開的埠(假設路由器默認打開了一些埠)?請指導我。我是套接字和網路的新手。
到目前為止我的代碼: -
客戶端 1(發件人)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((MYPUBLICIP, 433))
s.send(b"HELLO!")
s.close()
客戶 2(接收方)
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((MYPRIVATEIP, 433))
s.listen()
conn, addr = s.accept()
with conn:
print(f"[CONNECTION_ALERT] Received connection request from {addr}.")
while True:
data = conn.recv(1026).decode('utf-8')
if not data:
break
print(data)
我得到的錯誤:
ConnectionRefusedError: [WinError 10061] 由于目標機器主動拒絕,無法建立連接
如果需要,我的 python 版本是 10
uj5u.com熱心網友回復:
連接同一本地網路上的兩臺主機的解決方案
錯誤資訊表明您的防火墻可能阻止了網路流量,您可以嘗試禁用防火墻并重試,但不建議這樣做。如果您想玩網路東西,我建議您創建一個未連接到 Internet 的本地實驗室,例如 VM 或舊筆記本電腦/PC。
連接不在同一本地網路上的兩臺主機的解決方案
如果要連接不在同一本地網路上的兩臺主機,則問題會變得更加復雜,并且有幾種可能的解決方案:
- 向您的 ISP 詢問公共 IP(簡單但通常需要額外費用)
- 使用可用的軟體解決方案在 Internet 上創建專用網路,例如hamachi或ngrok(也很容易,但取決于用例成本會有所不同)
- 通過使用STUN來利用幼稚的 NAT (很難實作,但如果操作正確,則令人滿意,很好地解釋了它是如何在OpenTTD多人游戲中實作的)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/471940.html
