android socket開發(fā)中可能遇到的坑

最近公司的產(chǎn)品用到了socket通信方面的東西欧宜,花了點時間學習了下,基本使用什么的網(wǎng)上很容易找断国,就不說啦贤姆,這里呢,我把我遇到的坑們給大家嘮嘮稳衬,希望對大家有所幫助霞捡。

(○’ω’○)

1. android網(wǎng)絡(luò)請求需要放在工作線程中,socket通信也不例外薄疚;

2. 當socket長連接建立成功后碧信,如果手機屏幕關(guān)閉,只要過很短的時間街夭,android系統(tǒng)就會將socket服務(wù)掛起砰碴,這種行為應該是出于節(jié)電考慮的,但體驗會下去很多板丽,因為總是自動斷開呈枉!另外當我們的手機通過數(shù)據(jù)線連接電腦調(diào)試的時候趁尼,手機熄滅屏幕后,socket服務(wù)是不會被自動掛起的猖辫,似乎在調(diào)試模式下酥泞,手機不會自動進入節(jié)電模式,但當連接數(shù)據(jù)線充電的的話啃憎,手機在熄屏后還是會將socket服務(wù)掛起的ㄟ( ▔, ▔ )ㄏ芝囤。如果希望手機在熄屏后不將socket服務(wù)掛起,可以通過PowerManager設(shè)置電源模式辛萍,使cpu不進入節(jié)電模式悯姊,當然了,可以做個計時器贩毕,也別讓cpu全馬力輸出太久嘛悯许。

3. 客戶端希望確認服務(wù)器端是否在運行,可以發(fā)送心跳包耳幢;

4. 如果客戶端和服務(wù)器端需要雙向確認對方是否存活岸晦,可以自定義一個易區(qū)分的字段欧啤,時時發(fā)送睛藻,在網(wǎng)絡(luò)暢通的前提下,發(fā)送端如果發(fā)送失敗邢隧,則接收端停止運行店印,接收端如果超過某個時間段之后依然無法接收到信息,則發(fā)送端停止運行倒慧;

5. socket通信按摘,在發(fā)送數(shù)據(jù)時如果發(fā)送的數(shù)據(jù)被轉(zhuǎn)化為byte后,長度超過1448時纫谅,發(fā)送的數(shù)據(jù)將被拆分炫贤,比方說,發(fā)送一個1500長數(shù)據(jù)付秕,就會接收到2個包兰珍,包內(nèi)攜帶的發(fā)送信息的長度分別為1448和52;

6. 為了解決socket的這種自動拆包問題询吴,我們需要在發(fā)送的信息中寫入所發(fā)送的信息的總長度掠河,比如,首先我們可以將發(fā)送的第一位設(shè)置為“$”猛计,它就表示數(shù)據(jù)的開頭唠摹,接下來后四位用來存放數(shù)據(jù)的總長度,之后的部分用來存放發(fā)送數(shù)據(jù)奉瘤,這樣勾拉,接收端在接收到數(shù)據(jù)后就可以通過解析出數(shù)據(jù)的總長度來確認是否已經(jīng)接收完全,如果不全再繼續(xù)接收就可以了;

7. 發(fā)送數(shù)據(jù)過長時會有自動拆包的問題藕赞,當發(fā)送數(shù)據(jù)過短或者發(fā)送的數(shù)據(jù)之間時間間隔很短的時候苛秕,還會發(fā)生自動粘包的問題!自動粘包就是指本來是兩個或者多個包中的數(shù)據(jù)同時合并到了一個包中找默,這時候艇劫,容易出現(xiàn)解析不全的情況。解決粘包問題同樣可以使用上面提到的方法惩激,只不過反過來了店煞,當發(fā)現(xiàn)接收到的數(shù)據(jù)比通過首部一至五位計算出的長度要長時,可以通過截取的方法风钻,分段計算顷蟀;

8. 別以為自動拆包和自動粘包是互斥的,它們也有可能同時出現(xiàn)骡技! (╯‵□′)╯︵┻━┻ 首先發(fā)生粘包鸣个,而粘包的長度超過了1448,然后就會發(fā)生拆包布朦。囤萤。。處理方法也不難是趴,接收端首先處理粘包涛舍,當處理到最后一個包時會發(fā)現(xiàn)最后一個包不完整,將他保存下來唆途,與接下來接收到的數(shù)據(jù)進行拼接富雅,然后接續(xù)處理粘包就可以了,調(diào)用流程就是:處理粘包肛搬、處理拆包没佑、處理粘包。温赔。蛤奢。就可以了。

9. socket在api19之前沒有繼承Closeable接口让腹,如果大家是通過寫一個關(guān)閉Closeable對象的工具類來關(guān)閉socket的話還是別用了远剩,不然老版本的手機們只要一執(zhí)行到關(guān)閉socket的語句時就會異常退出;

10. socket在通信的時候可能需要啟動多個線程骇窍,可以考慮使用線程池瓜晤,線程池操作多個線程到底是方便些,而且因線程長時間持有socket對象而產(chǎn)生內(nèi)存溢出的情況會少很多腹纳,因為線程池可以集體關(guān)閉所有線程痢掠;

11.? 在熄屏的情況下驱犹,安卓端是接收不到UDP廣播的,試過各種方法足画,就是接收不到雄驹。查了下,發(fā)現(xiàn)是安卓本身的機制淹辞,沒發(fā)現(xiàn)啥解決方案医舆。

先寫這么多吧

(,,? ? ?,,)(,,? ? ?,,)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市象缀,隨后出現(xiàn)的幾起案子蔬将,更是在濱河造成了極大的恐慌,老刑警劉巖央星,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霞怀,死亡現(xiàn)場離奇詭異,居然都是意外死亡莉给,警方通過查閱死者的電腦和手機毙石,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颓遏,“玉大人徐矩,你說我怎么就攤上這事≈莶矗” “怎么了丧蘸?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遥皂。 經(jīng)常有香客問我,道長刽漂,這世上最難降的妖魔是什么演训? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮贝咙,結(jié)果婚禮上样悟,老公的妹妹穿的比我還像新娘。我一直安慰自己庭猩,他們只是感情好窟她,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔼水,像睡著了一般震糖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趴腋,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天吊说,我揣著相機與錄音论咏,去河邊找鬼。 笑死颁井,一個胖子當著我的面吹牛厅贪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雅宾,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼养涮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了眉抬?” 一聲冷哼從身側(cè)響起单寂,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吐辙,沒想到半個月后宣决,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡昏苏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年尊沸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贤惯。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡洼专,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出孵构,到底是詐尸還是另有隱情屁商,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布颈墅,位于F島的核電站蜡镶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恤筛。R本人自食惡果不足惜官还,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毒坛。 院中可真熱鬧望伦,春花似錦、人聲如沸煎殷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豪直。三九已至劣摇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顶伞,已是汗流浹背饵撑。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工剑梳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滑潘。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓垢乙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親语卤。 傳聞我的和親對象是個殘疾皇子追逮,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 最近在學習Python看了一篇文章寫得不錯,是在腳本之家里的粹舵,原文如下钮孵,很有幫助: 一、網(wǎng)絡(luò)知識的一些介紹 soc...
    qtruip閱讀 2,714評論 0 6
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用眼滤,...
    LZM輪回閱讀 3,310評論 0 6
  • 1.Python爬蟲聽課巴席,實戰(zhàn) 4小時! 2.聽各個專欄 1小時诅需! *面臨選擇時漾唉,問自己:這是我當下最重要的事情嗎...
    橘子俠閱讀 152評論 0 0
  • (上) 他們認識的里程场刑,就象他們經(jīng)過一個橢圓...
    落桑Chen閱讀 331評論 0 1
  • 支付寶 支付寶開發(fā)步驟: 創(chuàng)建應用 配置應用 設(shè)計 開發(fā) 調(diào)試 上線 創(chuàng)建應用 接入App支付能力般此,需要在開放平臺...
    DovYoung閱讀 1,227評論 0 0