2014-02-17 111 views
0

是否有可能通過python套接字編程連接到不同的子網或域?python套接字連接到不同的子網/域

我想打一個腳本與朋友共享文件,,但目前我只知道如何 一個局域網內連接。

+0

您創建一個Socket對象,然後你'socket.connect((主機名,端口))'。你有沒有嘗試過? – msvalkon

+0

This works,but I want to know how to do the same thing when the hostname is under some subnet,there is I can not connect them they directly我認爲 – Jilin

回答

1

在局域網中,您應該廣播數據包以發現對方。
並且每個對等端都應該聽端口接收廣播。

它是發現協議,可以通過UDP套接字實現它。

一旦兩個對等決定進行溝通,就應該建立一個TCP套接字。然後,他們可以通過TCP發送數據。
或者您可以使用HTTP,XML-RPC等傳輸數據(不廣播,TCP不支持廣播)。


#udp broadcast 
import socket, time 

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 

while True: 
    data = 'test'.encode() 
    s.sendto(data, ('255.255.255.255', 1080)) 
    time.sleep(1) 

#udp receive broadcast 
import socket 

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
s.bind(('', 1080)) 

while True: 
    print(s.recv(1024)) 
+0

是的,廣播應該是一個好方法。 那麼有什麼方法可以在另一個局域網內向所有人廣播嗎? – Jilin

+0

@吉林向另一個廣播是複雜的。如果沒有NAT,你可以設置填充hostid作爲dest ip來廣播。但對於NAT,您將需要一臺服務器作爲代理。 –

+0

還有很多需要學習的東西。謝謝,至少我知道如何在一臺路由器下處理它。 – Jilin