2015-10-03 236 views
0

我用udp socket構建了帶有攪拌機遊戲引擎的網絡遊戲,我有server.blend和client.blend。在我家,遊戲的偉大工程等連接..但是當我發出的client.blend的朋友,他無法連接到我的服務器..用於遠程連接的UDP服務器和客戶端ip

這是我的服務器的構造函數:

class Server: 

def __init__(self, host="", port= 9017): 

    self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    self.socket.setblocking(False) 
    self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    self.socket.bind((host, port)) 

這是我的客戶的構造:

class Client: 

def __init__(self, server_ip="192.168.1.12", server_port= 9017): 

    self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    self.socket.setblocking(False) 

    self.serv_addr = (server_ip, server_port) 

我認爲它不工作我的朋友的電腦上,因爲IP地址。

有誰知道有什麼問題?

+0

互聯網比這更復雜。您可能在防火牆後面執行地址轉換(NAT),該地址轉換阻止傳入的UDP數據包。你的朋友將無法直接訪問你的內部IP地址。要做到這一點,你必須制定一個特殊的防火牆規則。 – Keith

+0

我明白...讓我說我想做特別的防火牆規則..是否複雜?你知道如何做到這一點? – Maor2871

+0

這取決於你有什麼樣的。如果使用Linux,你可以[在網上找到一些tuturials](http://www.thegeekstuff.com/2011/02/iptables-add-rule/)。但是你可能不這樣做,所以你不得不參考你的模型的手冊。不幸的是,許多商業模式不會讓你做這種事情。 – Keith

回答

0

您使用的硬編碼IP是RFC 1918專用IP地址,它不能通過互聯網進行路由。如果您的朋友連接到您可能能夠連接到您的服務器的同一局域網。基本上,這歸結爲網絡問題。

可能的解決方案可能是在您的應用程序中定義主機名,並使用DynDNS提供程序將該主機名與您的路由器的公共IP一起註冊。然後在您的家庭路由器上設置端口轉發,以允許從Internet連接到您所需的udp端口上的服務器。還有一千種其他方式可以解決這個問題,但實際上,這種方式屬於網絡領域而不是編程領域。

+0

謝謝!您是否認爲此視頻中顯示的內容:https://www.youtube.com/watch?v = ZzVpkat16-Y可能有效? – Maor2871