2.打通兩個內網使用者的直接連線。前者其實是類似IPX over UDP的實現,如果局域網遊戲只支援IPX(很早期的遊戲),那麼需要用UDP封裝IPX,如果本來就支援UDP或者TCP,那麼就直接完成IP地址轉換,把網路的IP地址轉成內網。在具體實現的時候可以用網路驅動層(類似虛擬網絡卡或者Windows Driver),也可以利用Hook API進入遊戲網路程序內部截獲函式處理,然後修改每次的connect或者send函式的引數。(具體實現還會更加複雜,因為某些遊戲公司,比如暴雪,網路模組實現極其變態和不規範,大量使用微軟不支援的方法)浩方用的是後者(別問我為什麼知道)。打通區域網使用者的直連其實也是很複雜的一部分工作,因為各個閘道器裝置的NAT機理不同,有些“欺騙手段”未必對所有閘道器都有效,大致原理是兩個客戶端分別協助伺服器獲得自己的真實IP和內網IP,然後伺服器根據不同情況,偽造資料包啟動一個欺騙連線,協助兩個客戶端建立直接連線。當然也有方案是採用中間伺服器轉發兩個內網使用者的資料包,實測效能上有點問題,某些FPS遊戲延時嚴重。本質上這些技術都不太難,關鍵要對作業系統的函式呼叫機理相對熟悉,網路協議要清晰,剩下來的大部分工作量是除錯各種奇怪的環境和奇葩的遊戲。
2002年前後做過一個類似的實現,本質上來說,類似浩方這樣的平臺要提供兩種功能:
1.區域網協議在廣域網上的實現。
2.打通兩個內網使用者的直接連線。前者其實是類似IPX over UDP的實現,如果局域網遊戲只支援IPX(很早期的遊戲),那麼需要用UDP封裝IPX,如果本來就支援UDP或者TCP,那麼就直接完成IP地址轉換,把網路的IP地址轉成內網。在具體實現的時候可以用網路驅動層(類似虛擬網絡卡或者Windows Driver),也可以利用Hook API進入遊戲網路程序內部截獲函式處理,然後修改每次的connect或者send函式的引數。(具體實現還會更加複雜,因為某些遊戲公司,比如暴雪,網路模組實現極其變態和不規範,大量使用微軟不支援的方法)浩方用的是後者(別問我為什麼知道)。打通區域網使用者的直連其實也是很複雜的一部分工作,因為各個閘道器裝置的NAT機理不同,有些“欺騙手段”未必對所有閘道器都有效,大致原理是兩個客戶端分別協助伺服器獲得自己的真實IP和內網IP,然後伺服器根據不同情況,偽造資料包啟動一個欺騙連線,協助兩個客戶端建立直接連線。當然也有方案是採用中間伺服器轉發兩個內網使用者的資料包,實測效能上有點問題,某些FPS遊戲延時嚴重。本質上這些技術都不太難,關鍵要對作業系統的函式呼叫機理相對熟悉,網路協議要清晰,剩下來的大部分工作量是除錯各種奇怪的環境和奇葩的遊戲。