魔獸爭霸跨網段對戰原理與實現

來源:互聯網
上載者:User
1.魔獸爭霸III冰封王座區域網路連網過程

為了描述方便,先定義幾個術語:

伺服器:建立了遊戲的主機

客戶機:準備加入遊戲的主機

分兩種情況描述:

1.1客戶機點擊區域網路時,伺服器已經建立好了遊戲

魔獸爭霸啟動後,當玩家點擊“區域網路”按鈕時,會主動發送一次廣播UDP包,內容如下:

 

F7 2F 10 00 50 58 33 57 14 00 00 00 00 00 00 00(客戶詢問包)

上述包資料,隨魔獸爭霸的版本不同而不同,但是只要是一個版本,這個資料是不變的。

目的就是詢問本網段內所有的機器,看看是否有人建立了遊戲。如果有人建立了遊戲,那麼建立遊戲的機器就會返回一個地圖資訊的UDP單播包,地圖資料隨建立的遊戲的不同而不同,下面僅舉一例:

 

F7 30 8C 00 50 58 33 57  14 00 00 00 01 00 00 00 
39 69 C2 00 E5 BD 93 E5  9C B0 E5 B1 80 E5 9F 9F 
E7 BD 91 E5 86 85 E7 9A  84 E6 B8 B8 E6 88 8F 20  
28 76 73 00 00 01 03 49  07 01 01 77 01 B9 79 01  
99 D5 B9 31 4D CB 61 71  73 5D 45 6F 77 19 6F 6D  
6F 61 65 5D 45 2B 6F 75  41 21 41 6D 6D 2B 73 75 
61 73 73 21 77 B1 37 2F  37 31 63 2F 77 23 33 79  
01 77 73 01 01 00 0A 00  00 00 01 00 00 00 01 00
00 00 0A 00 00 00 1B 00  00 00 E0 17            (地圖包)

 

地圖資料同時說明了,遊戲的連接埠,本例就是E017,也就是6112.

客戶機收到這個地圖資訊後就會顯示出這個遊戲,點擊加入就可以進入了。

1.2客戶機點擊“區域網路”時,伺服器尚未建立遊戲

此時客戶機發送客戶詢問包後,沒有任何回應,以後也不會主動發送詢問包了。

待伺服器建立好了遊戲以後,會每隔大概3秒就在本網段廣播一次UDP包,內容如下:

 

F7 32 10 00 00 00 00 00 01 00 00 00 00 00 00 00(建主資訊包)

注意,上述內容的第五個位元組,每次建立遊戲都會不同。

用戶端收到這個包後,會向伺服器單播一個詢問包,伺服器收到後,單播返回地圖包,客戶機如果已經顯示了這個遊戲就會更新遊戲資訊,如果還沒有就增加這個遊戲顯示,玩家點擊即可進入。

2.跨網段連網的三個切入點與我的選擇2.1 跨網段發起主動包

從連網過程可以看到,連網過程可以從客戶機發起,也可以從伺服器發起,而且發起過程都是在本網段廣播UDP包,客戶機主動發起的時候是廣播“詢問包”,伺服器發起的時候是廣播“建主資訊包”,以後的過程都是單播UDP。這樣一來,由於廣播智能在本網段進行,所以其他網段的機器無法通過廣播來主動發起連網,也無法收到本網段機器主動發送的廣播包,從而無法連入遊戲。

 

知道了這個過程,就很容易想到跨網段串連過程,假設有兩個網段A和B,用A(x)表示A網段的機器,B(x)表示B網段的機器,要讓A(x)和B(x)互聯,那麼主動發起的一方就要把包發送到對方,顯然通過廣播是不行的,那就用單播吧。但問題又來了,UDP的連接埠要和魔獸遊戲一樣才行,這樣魔獸才能收到回來的包。可魔獸的UDP連接埠是獨佔的沒有辦法和其他軟體共用。看來一般的socket編程是不行了,可以採用winpcap構造底層包來完成這個工作。我用的是C#的封裝Sharppcap。

2.2 三種連網方式

誰來發起主動串連呢,答案是不一定。客戶機和伺服器都可以。

(1)客戶機發起主動串連

前提是必須知道伺服器的IP地址,這樣就可以向伺服器主動發送"詢問包”,從而引發以後的連網過程。

(2)伺服器發起主動串連

前提是必須知道客戶機的IP地址,這伺服器端軟體截獲廣播到本網段的“建主資訊包”,轉寄到其他網段的客戶機,從而引發以後的連網過程。

(3)伺服器直接發送地圖

前提是必須知道客戶機的IP地址,伺服器端軟體截獲髮網本網段客戶機的地圖資訊包,轉寄到其他網段的客戶機。

上述方式中,(2),(3)都必須要截獲後轉寄,而(1)只要發送就可以,因為對於固定版本的魔獸來說,“詢問包”是恒定的。

簡單的就是最好的,我的選擇是通過(1)來完成跨網段連網。

 

3 連網軟體在哪裡運行

這個問題比較有意思,因為UDP可以偽造。也就是說,軟體可以代表運行自身的主機發起主動包,也可以偽裝成別人發起主動包。只要運行軟體的主機能訪問到接收主動包的機器就可以,可以在任意網段的任意機器上。

 

4.軟體使用說明

 

4.1安裝

本軟體採用C#寫成,採用.net Framework 4.0。故必須先安裝有.net Framework4.0。另外需要winpcap,本軟體包已經收錄了,使用者無需另外下載。安裝.net Framework和winpcap後,即可直接運行本軟體了。

 

4.2使用說明

需要填寫的資訊有:軟體運行所在機器的網關IP, 魔獸伺服器的IP,連接埠,用戶端的IP,連接埠。用戶端玩家點擊“區域網路”以後再運行本軟體,用戶端就可以看到遊戲了。

 

4.3注意開啟防火牆

防火牆要對魔獸開放,如果不會,直接關閉防火牆即可。

 

4.4軟體下載

已放到了csdn資源裡。http://download.csdn.net/source/3406656,需要源碼的朋友QQ聯絡112633012。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.