2014-01-06 26 views
1

如果你能幫助我解決我的問題,請點擊這裏。一方面,我有連接到路由器172.27.13.1的WAN接口的IP 172.27.13.2服務器...然後在我的路由器192.168.1.1的無線局域網上,我連接了幾個客戶端。現在我將用C編寫代碼,其中客戶端向服務器請求一些UDP流,然後服務器向客戶端廣播流,如果某些數據包丟失,客戶端必須向服務器發送NACK。我的問題是: 由於服務器和客戶端位於不同的子網上,我如何從服務器進行廣播? 以及客戶端如何將請求和NACK發送到服務器,因爲它們位於不同的子網中? 這些問題可以通過路由器配置或C代碼解決嗎?在不同的子網上廣播

感謝您的幫助

回答

1

您無法廣播到不同的子網。路由器通常不會將廣播數據包轉發到不同的子網,除非您有一個可以正確配置的非常特殊的路由器(例如Cisco ...)。但是,您可以使用多播來完成這樣的任務。下面是a C example

而且檢查:UDP broadcast packets across subnets

注意:一些包括在C例如缺失,但他們很容易找到

+0

但是在客戶端我只有一個LAN子網192.168 .1.1/24所以爲什麼我不能從192.168.1.255上的服務器發送廣播數據包....問題是客戶端如何在172.27.13.2上響應服務器?這個響應是單播的。或者我不太瞭解這個概念。 謝謝 – user3119422

+0

@ user3119422廣播僅適用於一個子網,因此您無法從192.168.1.0/24發送廣播,並且它們以172.27.13.2結束(您也可以以相反方式進行)單播不成問題,只要你有一個正確的路由器設置。 – nos

+2

由於安全原因,使用其他接口廣播地址的廣播幾乎處於禁用狀態。想象一下,這是被允許的,並且結果是在不知道其細節的情況下針對遠程結構的高效DoS。通常,一些代理應該將您的數據包重新傳輸到本地子網。如果您在企業級需要它,請研究多播和多播路由。 – Netch

1

由於兩個服務器&用戶在不同的子網。至於路由器DONOT前進廣播。但我們通過修改路由器配置來解決問題。 如果你有cisco路由器&用戶在cisco交換機上連接,你可以在vlan上使用ip helper address命令。你可以在路由器上允許udp數據包ACL

+0

嗨,我沒有思科路由器,我讀到他們可以做到這一點......所以我決定在C中使用多播套接字來解決我的問題。謝謝 – user3119422