国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

上海 設(shè)計網(wǎng)站建設(shè)上海百度seo優(yōu)化

上海 設(shè)計網(wǎng)站建設(shè),上海百度seo優(yōu)化,學(xué)校網(wǎng)站建設(shè)申請報告,wordpress網(wǎng)站的根目錄在哪里如何用最簡單的方法解決TCP傳輸中的分包粘包問題? 首先需要說明一點(diǎn),分包粘包等等一系列的問題并不是協(xié)議本身存在的問題,而是程序員在寫代碼的時候,沒有搞清楚數(shù)據(jù)的邊界導(dǎo)致的。 看個簡單的例子,TCP客戶端不斷的向服…

如何用最簡單的方法解決TCP傳輸中的分包粘包問題?

在這里插入圖片描述
首先需要說明一點(diǎn),分包粘包等等一系列的問題并不是協(xié)議本身存在的問題,而是程序員在寫代碼的時候,沒有搞清楚數(shù)據(jù)的邊界導(dǎo)致的。

看個簡單的例子,TCP客戶端不斷的向服務(wù)器發(fā)送字符串,每次發(fā)送完成隨機(jī)睡眠一會。

char *buf[] = {"aaaaaaaaaaaaaaaaaaaaaaaaaaaa","bbbbbbbbbbb","ccccccccccccccccccc","dddddddddddddddddddddddddddddddddddddddddddd","eeeeeeeeeeeeeeeeeeeeeeee","ffffffff","gggggggggggggggggggggggggggggggggggg","hhhhhhhhhhhhhhhhhhhhhhhhhhhhh","iii","jjjjjjj","kkkkkkkkkkkkkkkkkkkkkk"
};srand(time(NULL));for (int i = 0; i < sizeof(buf) / sizeof(buf[0]); i++)
{   if (send(sockfd, buf[i], strlen(buf[i]), 0) == -1){perror("send");break;}usleep(1000 * 10);
}

服務(wù)器端接收數(shù)據(jù)的時候同樣如此。

char buf[1024] = {0};srand(time(NULL));while (1) 
{   size = recv(fd, buf, sizeof(buf), 0); if (size == -1) {   perror("recv");break;}   else if (size == 0){printf("客戶端斷開連接 ...\n");break;}printf("收到一條數(shù)據(jù) %s\n", buf);bzero(buf, 1024);usleep(1000 * (rand() % 100 + 1));
}

我們希望看到的現(xiàn)象是,服務(wù)器端收到的數(shù)據(jù)和客戶端一樣。

運(yùn)行程序,客戶端發(fā)送完成,但是服務(wù)器端收到的數(shù)據(jù)卻不是我們想要的。

root@Turbo:test# ./1.tcp-server 
等待客戶端的連接 ...
接受客戶端的連接 4
收到一條數(shù)據(jù) aaaaaaaaaaaaaaaaaaaaaaaaaaaa
收到一條數(shù)據(jù) bbbbbbbbbbbcccccccccccccccccccddddddddddddddddddddddddddddddddddd
dddddddddeeeeeeeeeeeeeeeeeeeeeeeeffffffffgggggggggggggggggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhiiijjjjjjj收到一條數(shù)據(jù) kkkkkkkkkkkkkkkkkkkkkk
客戶端斷開連接 ...
root@Turbo:test#

數(shù)據(jù)內(nèi)容沒有變,出現(xiàn)了多個字符串連接在一起的現(xiàn)象。

原因就是發(fā)送數(shù)據(jù)過快,或者接收數(shù)據(jù)太慢,導(dǎo)致TCP緩沖區(qū)中積累了很多數(shù)據(jù),調(diào)用recv函數(shù)讀數(shù)據(jù)的時候,就會一下子全部讀出來。

想要解決這個問題,最簡單的辦法就是分清楚數(shù)據(jù)包的邊界。發(fā)送字符串之前,在數(shù)據(jù)包的前面加上字符串的長度。

char *sendMsg = (char *)malloc(1024);
int len = 0;srand(time(NULL));for (int i = 0; i < sizeof(buf) / sizeof(buf[0]); i++)
{len = strlen(buf[i]);memcpy(sendMsg, &len, sizeof(int));memcpy(sendMsg + sizeof(int), buf[i], len);if (send(sockfd, sendMsg, strlen(buf[i]) + sizeof(int), 0) == -1){perror("send");break;}memset(sendMsg, 0, 1024);usleep(1000 * 10);
}

接收數(shù)據(jù)的時候,先讀取4個字節(jié)的整型數(shù)據(jù),得到接下來字符串的長度,再讀取對應(yīng)長度的字符串。

char buf[1024] = {0};
ssize_t size;
int len = 0;srand(time(NULL));while (1) 
{   size = recv(fd, &len, sizeof(int), 0); size = recv(fd, buf, len, 0); if (size == -1) {   perror("recv");break;}else if (size == 0){printf("客戶端斷開連接 ...\n");break;}printf("收到一條數(shù)據(jù) %s\n", buf);bzero(buf, 1024);usleep(1000 * (rand() % 100 + 1));
}

再次運(yùn)行程序,不管睡眠時間怎么變化,服務(wù)器端收到的數(shù)據(jù)和客戶端一樣,也沒有出現(xiàn)粘在一起的現(xiàn)象。

root@Turbo:test# ./1.tcp-server 
等待客戶端的連接 ...
接受客戶端的連接 4
收到一條數(shù)據(jù) aaaaaaaaaaaaaaaaaaaaaaaaaaaa
收到一條數(shù)據(jù) bbbbbbbbbbb
收到一條數(shù)據(jù) ccccccccccccccccccc
收到一條數(shù)據(jù) dddddddddddddddddddddddddddddddddddddddddddd
收到一條數(shù)據(jù) eeeeeeeeeeeeeeeeeeeeeeee
收到一條數(shù)據(jù) ffffffff
收到一條數(shù)據(jù) gggggggggggggggggggggggggggggggggggg
收到一條數(shù)據(jù) hhhhhhhhhhhhhhhhhhhhhhhhhhhhh
收到一條數(shù)據(jù) iii
收到一條數(shù)據(jù) jjjjjjj
收到一條數(shù)據(jù) kkkkkkkkkkkkkkkkkkkkkk

方法很簡單,也只是加了一個包頭,其實(shí)目的就是為了告訴接收端,數(shù)據(jù)包從哪開始,到哪結(jié)束,這樣就算緩沖區(qū)中有大量數(shù)據(jù),也能分得清楚。

http://m.aloenet.com.cn/news/40395.html

相關(guān)文章:

  • 個人站長怎么樣做網(wǎng)站才不會很累關(guān)鍵詞調(diào)詞平臺費(fèi)用
  • 適合推廣的網(wǎng)站有哪些南昌網(wǎng)站優(yōu)化公司
  • 手機(jī)網(wǎng)站設(shè)計小程序色盲眼鏡
  • 網(wǎng)站全局搜索如何做如何設(shè)計與制作網(wǎng)頁
  • vue.js 做網(wǎng)站網(wǎng)站開發(fā)制作培訓(xùn)學(xué)校
  • 怎么設(shè)置網(wǎng)站亞馬遜站外推廣網(wǎng)站
  • 不用ftp做網(wǎng)站云seo關(guān)鍵詞排名優(yōu)化軟件
  • 建網(wǎng)站的公司不肯簽合同長沙網(wǎng)站制作費(fèi)用
  • wordpress 技術(shù)教程seo 關(guān)鍵詞優(yōu)化
  • 做寫真網(wǎng)站的限度游戲優(yōu)化
  • 做別人的網(wǎng)站詐騙視頻下載廣州網(wǎng)站優(yōu)化排名系統(tǒng)
  • 學(xué)校網(wǎng)站建設(shè)的風(fēng)險分析微信管理系統(tǒng)登錄入口
  • 淄博網(wǎng)站制作形象培訓(xùn)網(wǎng)址
  • 建購物的網(wǎng)站需要多少錢八零云自助建站免費(fèi)建站平臺
  • 購物網(wǎng)站成品淘寶推廣工具
  • 人人設(shè)計網(wǎng)官方網(wǎng)站cilimao磁力貓在線搜索
  • wap網(wǎng)站制作軟件個人免費(fèi)推廣網(wǎng)站
  • 陜西網(wǎng)站制作電話網(wǎng)站代搭建維護(hù)
  • 用戶體驗(yàn)比較好的網(wǎng)站太原關(guān)鍵詞優(yōu)化軟件
  • 網(wǎng)站設(shè)計介紹常用的搜索引擎
  • 江蘇專業(yè)做網(wǎng)站淘寶關(guān)鍵詞排名
  • 做網(wǎng)站界面一般用什么來做廣告公司取名字參考大全
  • wordpress廣告窗插件搜索引擎優(yōu)化怎么做的
  • 企業(yè)商城網(wǎng)站 .net天津seo外包
  • 免費(fèi)英文網(wǎng)站建設(shè)學(xué)電商出來一般干什么工作
  • 深圳高端網(wǎng)站建設(shè)網(wǎng)頁設(shè)計鄭州企業(yè)網(wǎng)絡(luò)推廣外包
  • 建個網(wǎng)站多少錢app什么平臺可以打廣告做宣傳
  • 海南建設(shè)網(wǎng)站公司廣告文案
  • 網(wǎng)站設(shè)計錯誤如何發(fā)布自己的廣告
  • 建設(shè)網(wǎng)站的五個步驟網(wǎng)站推廣的100種方法