天天看點

《Android 3D遊戲開發技術寶典——OpenGL ES 2.0》——2.6節Socket網絡通信

本節書摘來自異步社群《android 3d遊戲開發技術寶典——opengl es 2.0》一書中的第2章,第2.6節socket網絡通信,作者 吳亞峰,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

2.6 socket網絡通信

android 3d遊戲開發技術寶典——opengl es 2.0

伴随着移動網際網路的高速增長,智能手機上的遊戲娛樂應用也逐漸由單機向網絡化方向發展。是以對于android開發人員來說,開發具有網絡功能的應用程式成為了一項必備的技能。本節将向讀者介紹網絡開發中非常重要的一項技術,socket(網絡套接字)應用開發。

2.6.1 socket開發基本知識

網絡應用程式的開發也有很多不同的架構與模式,常見的有b/s、c/s等,socket主要是用于進行傳統的c/s模式應用的開發。c/s模式中主要需要開發兩個端,服務端與用戶端,其基本的工作原理如圖2-27所示。

從圖2-27中可以看出,c/s模式通信的基本過程如下。

(1)首先啟動伺服器,監聽指定端口,等待接收用戶端的連接配接請求。

(2)用戶端請求連接配接到伺服器的指定端口。

(3)伺服器收到用戶端的連接配接請求,建立連接配接。

(4)用戶端和伺服器同時各打開一個輸入流和輸出流,用戶端的輸出流與伺服器的輸入流連接配接,伺服器的輸出流與用戶端的輸入流連接配接。

(5)用戶端與伺服器端通過輸入輸出流進行雙向的消息通信。

(6)當通信完畢後,用戶端和伺服器同時關閉本次連接配接。

《Android 3D遊戲開發技術寶典——OpenGL ES 2.0》——2.6節Socket網絡通信

由于android應用程式是使用java進行開發,是以在android平台下開發基于socket的c/s模式程式非常簡單,直接使用java中的socket與serversocket類即可。這與傳統java的網絡套接字開發幾乎沒有差別,對于熟悉java的大部分讀者來說非常簡單。

2.6.2 伺服器端

上一小節簡單介紹了基于socket的c/s模式網絡程式的基本工作原理,從本小節開始将向讀者介紹一個基于socket的簡單案例。首先介紹服務端的開發,由于本案例比較簡單,僅有一個類——sample2_9_server,其代碼如下。

第9行建立了serversocket對象,監聽在伺服器的8877端口。

第11-20行為服務循環,伺服器一旦成功啟動監聽在指定的端口就進入此循環,按照指定的流程服務于一個一個的用戶端。本案例中的服務流程為:首先與用戶端建立雙向資料流,然後首先接收用戶端的資訊,再向用戶端傳回資訊。

運作本案例,其運作效果如圖2-28所示。

《Android 3D遊戲開發技術寶典——OpenGL ES 2.0》——2.6節Socket網絡通信

2.6.3 用戶端

開發完本案例的伺服器端後,接下來在本小節中将主要介紹用戶端的開發。由于本案例功能簡單,是以用戶端也僅有一個類——sample29 clientactivity,其代碼如下。

第7-15行為繼承activity後重寫的oncreate方法,該方法在程式開始時執行。在該方法中首先獲得“連接配接伺服器端”按鈕對象的引用,之後為該按鈕添加監聽器,監聽器功能為connectserver方法連接配接伺服器收發資訊。

第16-32行為連接配接伺服器收發資訊的connectserver方法,其基本的工作流程為:首先向伺服器發出連接配接請求,連接配接成功後建立雙向資料流,然後首先将使用者輸入的資訊發送給伺服器端再從伺服器端接收回報資訊。

提示 在建立socket套接字對象時需要指明端口号以及伺服器端的ip,這裡的ip必須為真實ip,不能使用環回位址“127.0.0.1”。是以運作本案例時讀者有可能需要根據自己計算機的具體情況修改伺服器的ip位址,使得程式可以正常運作。同時,在開發用戶端時需要在androidmanifest.xml中聲明聯網權限,具體情況參見CD光牒中的源代碼。

運作本案例,在上面的文本框中輸入需要發送的資訊,然後單擊“連接配接伺服器端”按鈕。若網絡沒有問題,則在伺服器端可以收到用戶端發送的資訊,如圖2-29所示。同時,用戶端也會收到伺服器的回報資訊,如圖2-30所示。

《Android 3D遊戲開發技術寶典——OpenGL ES 2.0》——2.6節Socket網絡通信

繼續閱讀