Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 使用Netty進行Android與Server端通信實現文字發送接收與圖片上傳,

使用Netty進行Android與Server端通信實現文字發送接收與圖片上傳,

編輯:關於android開發

使用Netty進行Android與Server端通信實現文字發送接收與圖片上傳,


ANOTHER TITLE:

Let’s use netty to achieve text send and receive and  image transfer to server based on android and jdk1.7

就讓我來Rap<MC Hotdog>,使用netty進行安卓端發送接收文字,並且附帶發送圖片功能,折騰了幾天的netty總算有點眉目了,做下記錄。

需求是安卓端拍照上傳到服務器,服務器返回上傳成功或失敗bla bla bla,需求比較簡單。最初使用的傳統的post加multipart/form-data,一般的手機照片大小1-2M,測試沒問題,但實際情況是有的用戶使用3G網絡,有的4G,有的WIFI還有的使用2G,網絡環境稍微有點差的上傳圖片時間持續到十多分鐘(我都不好意思說了),然後想到了使用socket,然後google到了netty,有的大神說這樣的需求沒必要上netty啊,其實我就是想通過這個需求學習下關於socket,關於netty,關於channel,關於byte[],關於NIO,多學習點總是沒壞處的,後面我也可以牛逼點說玩過高性能基於事件的異步網絡框架了。

剛開始直接啃的netty.io的document,照葫蘆畫瓢抄完了TimeServer之後就滿世界的google其他的netty知識,比較零散,然後入手了《Netty權威指南第二版》,啃了幾章之後怎麼也是TimeServer,不過對NIO一些基本組件有了一個初步的認識。

OK,入正題,我要實現一個Demo,就說是個Netty的聊天室吧(群聊,沒有單聊的功能,demo味兒十足),不過客戶端換成了安卓,一個服務器對多個客戶端,所有數據經過服務器端,要定義中間信息交換組件。關於Google的Protobuf還有MessagePack和JBoss Marshalling這些編解碼中間件都沒有玩過,似乎有點看不懂,我的需求很簡單,如下圖(抱歉鍵盤黨多年手已廢掉,可能只有我自己看得懂):

Echo-Server、Echo-Pojo、Lets's Chat Relationship

一共包含三個對象:

Echo-Pojo,信息交換中間對象,用於Android端與Server端封裝byte[]之後的序列化對象。

Let’s Chat,安卓客戶端,構建EchoMessage或EchoFile對象,然後發送到channel;EchoMessage與EchoFile用於服務端判斷信息對象的類別。

Echo-Server,服務端。ChannelRead時判斷信息對象類型,決定是廣播到所有用戶還是保存文件。

對於ByteBuf對象一直沒有弄很明白,所以上述也就沒有使用。

來張安卓端(小米PAD)Let’s Chat的運行截圖:

Let's Chat小米Pad運行截圖Let’s Chat小米Pad運行截圖

三星手機Let’s Chat運行截圖:

Let's Chat三星手機運行截圖Let’s Chat三星手機運行截圖

服務端(Echo-Server)的運行截圖:

Echo-Server輸出日志與說明截圖Echo-Server輸出日志與說明截圖

上傳的文件:

QQ截圖20160518132859

文件名格式為:Build.MANUFACTURE+UUID.randomUUID()+”.jpg”,第二張圖片為12.9M,上傳時間六七秒鐘,應該還有優化的空間。

Echo-Pojo的代碼就不截圖了,直接下載查看就可以,或者也可以繼續擴展,目前只是圖片跟文字。

上述功能一共分為三個程序,Echo-Pojo信息交換對象使用eclipse-Mars2開發,Echo-Server使用Intellij idea開發,Let’s Chat使用Android Studio2,有點蛋疼,但好在實現了功能,中間折騰的很多,尤其公司電腦跟家裡電腦jdk不一致,一個1.8,一個1.7,因為這個出了很多莫名的錯誤,也浪費了很多時間,中間的各種折騰各種煩躁就不記錄了。

 

代碼注釋比較少,也有很多廢棄的沒有刪掉,只是實現了功能可以運行,沒有做完全整理,有問題可以直接回復或者@EMAIL ME

借鑒劉源的NettyFileTransfer,只是我把客戶端修改成了Android,然後Netty版本我用的是4.0.36Final,感謝大神。

剩下的就是把功能揉進項目裡了,Keep Fighting !

項目開源地址:https://github.com/LisonLiou/netty-learning.git

原始地址:http://lison.cc/508.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved