<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      安卓筆記俠

      專注安卓開發(fā)

      導(dǎo)航

      socket通信如何處理每次包長度不定問題

      說起來,這是一個漫長的問題:

      客戶端和服務(wù)器通信的結(jié)構(gòu)是:包頭+數(shù)據(jù)長度+數(shù)據(jù)

      客戶端請求服務(wù)器發(fā)送200包數(shù)據(jù)。包頭=request;長度=4(一個int),數(shù)據(jù)=200;

      服務(wù)器在收到客戶端的請求后,在while循環(huán)里面不停的send,直到夠200包:包頭=indicate 長度=XX,后面跟一大串?dāng)?shù)據(jù);發(fā)完以后,再發(fā)一個結(jié)束的包:包頭=end,長度-1,data=無效值。

      在服務(wù)器端,在while循環(huán)里不停的recv:先recv包頭,在recv長度。如果判斷是數(shù)據(jù),然后recv數(shù)據(jù)。如果判斷是結(jié)束包,那么break出循環(huán)。

      這個看似沒有問題的程序,實際存在一個問題:

      在客戶端,recv包頭和長度后,recv數(shù)據(jù),可能出現(xiàn)數(shù)據(jù)并沒有全部傳過來的情況,比如recv長度后,得知后面的數(shù)據(jù)有15000字節(jié)。但是由于阻塞等原因,只傳過來了7000字節(jié)。那么按照原來程序的邏輯,就會在下一次recv包頭和長度時,將實際發(fā)送的剩下的8000字節(jié)當(dāng)做新一包的包頭,然后解包,這樣就出現(xiàn)了錯誤。

      我的處理辦法是,如果recv數(shù)據(jù)時,實際收到的長度不等于發(fā)送數(shù)據(jù)長度,那么就搞一個小的while循環(huán),在循環(huán)中把這一包收滿(為了保證收滿,可以sleep(10)),然后跳出來,繼續(xù)收下一包,就解決了。

      這個辦法是很土,但是由于每包的長度不定,所以暫時只能想到這個辦法解決。

      posted on 2019-03-04 17:34  安卓筆記俠  閱讀(1584)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 日本无遮挡吸乳呻吟视频| 日韩精品中文字一区二区| 成人精品天堂一区二区三区| 台湾省| 国产主播精品福利午夜二区| 国产AV福利第一精品| 亚洲电影在线观看| 精品人妻伦一二三区久久| 国产精品一区二区三区蜜臀| 久久久国产精品VA麻豆| 国产午夜A理论毛片| 久久精品国产亚洲av麻| 国产人妻精品午夜福利免费 | 国产精品自产拍在线播放| 国产色无码专区在线观看| 国产精品毛片在线看不卡| 成人亚洲av免费在线| 青草视频在线观看视频| 黄色三级亚洲男人的天堂| 国产超碰无码最新上传| 国产一区二区三区小说| 国产一区二区不卡在线视频 | 一本大道色婷婷在线| 国产99精品成人午夜在线| 国产成人高清亚洲综合| 亚洲欧美牲交| 伊人久久大香线蕉综合观| 狠狠色丁香婷婷综合尤物 | 亚洲免费一区二区av| 亚洲国产五月综合网| 精选国产av精选一区二区三区| 久久一级精品久熟女人妻| 国产一区二区av天堂热| 国产亚洲精品福利在线无卡一 | 久久精品国产91久久麻豆 | 大地资源免费视频观看| 年日韩激情国产自偷亚洲| 欧美日韩一线| 国产午夜精品一区二区三区漫画| 午夜成人无码免费看网站| 国产性色的免费视频网站|