資源描述:
《socket編程 android》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Androidsocket編程以非阻塞I/O服務(wù)器及Service為例 介紹Socket通信,有兩個不足的地方, 1.服務(wù)器會造成IO的阻塞 即服務(wù)器一旦執(zhí)行server.accept(); 將一直處于阻塞狀態(tài),直到有客戶端請求連接?! ?.服務(wù)器端沒有建立用戶列表,無法將某一客戶端發(fā)送的消息廣播給所有正在連接的客戶端。 就好象是一個人自說自話,自己發(fā)送給客戶端,自己接收服務(wù)器返回的消息。 基于以上兩點,我改進了我的程序?! 》?wù)器端的改進: 1.通過采用socketchannel的非阻塞方式進行通信 2.建
2、立Userlist客戶端的哈希表,存儲已連接客戶端的ip地址和服務(wù)器為其分發(fā)的socketchannel 客戶端的改進: 1.采用Service與服務(wù)器端進行連接,發(fā)送數(shù)據(jù),實時監(jiān)聽服務(wù)器返回的數(shù)據(jù)?! ×鞒虉D: 需要改進的地方 服務(wù)器端: 1.當(dāng)一個客戶端斷開連接以后,另一個客戶端在收到消息之前也斷開連接,而此時服務(wù)器正在向客戶端發(fā)送消息, 因此,服務(wù)器的Thread.sleep時間不能太長,但也不能太短,因為考慮到服務(wù)器的負(fù)荷問題?! ?.服務(wù)器容錯處理機制需要改進?! 】蛻舳耍骸 ?.將Notificat
3、ionbar改為其他更為直觀方式刷新顯示?! ?.容錯處理機制的處理?! ∠旅媸切Ч麍D: 服務(wù)器端: dos客戶端: Android客戶端: 效果圖的意思是,Android的客戶端通過綁定Service與服務(wù)器端進行了連接,并發(fā)送消息。服務(wù)器向所有正在連接的客戶端廣播消息?! ≈螅珼os終端也進行連接,并發(fā)送消息,服務(wù)器接到消息后向所有正在連接的客戶端廣播消息(其中包括在線的android手機)第1頁第2頁第3頁第4頁第5頁第6頁 之前采用聊天敲門的方式來介紹Socket通信,有兩個不足的地方, 1.服務(wù)器會
4、造成IO的阻塞 即服務(wù)器一旦執(zhí)行server.accept(); 將一直處于阻塞狀態(tài),直到有客戶端請求連接?! ?.服務(wù)器端沒有建立用戶列表,無法將某一客戶端發(fā)送的消息廣播給所有正在連接的客戶端?! 【秃孟笫且粋€人自說自話,自己發(fā)送給客戶端,自己接收服務(wù)器返回的消息。 基于以上兩點,我改進了我的程序。 服務(wù)器端的改進: 1.通過采用socketchannel的非阻塞方式進行通信 2.建立Userlist客戶端的哈希表,存儲已連接客戶端的ip地址和服務(wù)器為其分發(fā)的socketchannel 客戶端的改進: 1
5、.采用Service與服務(wù)器端進行連接,發(fā)送數(shù)據(jù),實時監(jiān)聽服務(wù)器返回的數(shù)據(jù)?! ×鞒虉D: 需要改進的地方 服務(wù)器端: 1.當(dāng)一個客戶端斷開連接以后,另一個客戶端在收到消息之前也斷開連接,而此時服務(wù)器正在向客戶端發(fā)送消息, 因此,服務(wù)器的Thread.sleep時間不能太長,但也不能太短,因為考慮到服務(wù)器的負(fù)荷問題?! ?.服務(wù)器容錯處理機制需要改進?! 】蛻舳耍骸 ?.將Notificationbar改為其他更為直觀方式刷新顯示?! ?.容錯處理機制的處理?! ∠旅媸切Ч麍D: 服務(wù)器端: dos客戶端: An
6、droid客戶端: 效果圖的意思是,Android的客戶端通過綁定Service與服務(wù)器端進行了連接,并發(fā)送消息。服務(wù)器向所有正在連接的客戶端廣播消息?! ≈螅珼os終端也進行連接,并發(fā)送消息,服務(wù)器接到消息后向所有正在連接的客戶端廣播消息(其中包括在線的android手機)第1頁第2頁第3頁第4頁第5頁第6頁 接上頁 源代碼如下: Server端: packagecom.android.Yao; importjava.io.*; importjava.nio.*; importjava.nio.chan
7、nels.*; importjava.net.*; importjava.util.*; importjava.nio.charset.*; importjava.lang.*; publicclassYaoChatServer { publicSelectorsel=null; publicServerSocketChannelserver=null; publicSocketChannelsocket=null; publicintthisport=4900; privateStringresul
8、t=null; privateHashtableuserlists; privateSocketChannelreadingsocket=null; publicYaoChatServer() { System.out.println("Insidestartserver"); } pub