学习笔记(10):Python网络编程并发编程-粘包现象
立即學(xué)習(xí):https://edu.csdn.net/course/play/24458/296240?utm_source=blogtoedu
?????? 粘包現(xiàn)象:服務(wù)器接收到客戶端的命令后,進(jìn)行執(zhí)行得到結(jié)果后,再發(fā)送回給客戶端,在這個(gè)過程中如果服務(wù)器返回的結(jié)果的字節(jié)數(shù)會(huì)大于客戶端所接收最大字節(jié)數(shù)(此處以1024為客戶端接收的最大字節(jié)數(shù)),則大于1024字節(jié)的殘余結(jié)果會(huì)堆積在服務(wù)器發(fā)送返回客戶端的管道中,這個(gè)現(xiàn)象叫做殘余數(shù)據(jù)。等下一次再執(zhí)行客戶端命令返回命令結(jié)果給客戶端時(shí),會(huì)先把管道中的殘余數(shù)據(jù)發(fā)送返回給客戶端,這時(shí)候就會(huì)出現(xiàn)客戶端接收的結(jié)果并不是自己發(fā)送命令所希望得到的結(jié)果,因?yàn)樗邮盏慕Y(jié)果含有上一次執(zhí)行時(shí)的殘余數(shù)據(jù)甚至只有殘余數(shù)據(jù),即多次命令(也成為多個(gè)包)的結(jié)果摻雜在了一起,這種現(xiàn)象成為粘包現(xiàn)象。例子如下:
'''先運(yùn)行服務(wù)器端,再在客戶端上一次輸入dir、tasklist、dir命令,觀察服務(wù)器端執(zhí)行命令的結(jié)果的字節(jié)數(shù)長(zhǎng)度,以及觀察客戶端接收到的結(jié)果,尤其是兩次運(yùn)行dir命令的結(jié)果 '''客戶端的結(jié)果:''' E:\python3\venv2\venv\Scripts\python.exe C:/Users/jinlin/Desktop/python_further_study/socket編程/簡(jiǎn)單的套接字通訊加循環(huán)/客戶端.py 請(qǐng)輸入命名:dir 服務(wù)器返回來的數(shù)據(jù): 驅(qū)動(dòng)器 C 中的卷是 本地磁盤卷的序列號(hào)是 B476-3C7CC:\Users\jinlin\Desktop\python_further_study\socket編程\模擬ssh遠(yuǎn)程操作命令 的目錄2020/03/09 10:57 <DIR> . 2020/03/09 10:57 <DIR> .. 2020/03/07 13:35 0 __init__.py 2020/03/07 10:02 895 客戶端_.py 2020/03/09 10:57 1,112 服務(wù)器端_.py3 個(gè)文件 2,007 字節(jié)2 個(gè)目錄 124,751,876,096 可用字節(jié)************************************************** 請(qǐng)輸入命名:tasklist 服務(wù)器返回來的數(shù)據(jù): 映像名稱 PID 會(huì)話名 會(huì)話# 內(nèi)存使用 ========================= ======== ================ =========== ============ System Idle Process 0 Services 0 4 K System 4 Services 0 588 K smss.exe 324 Services 0 804 K csrss.exe 524 Services 0 9,064 K csrss.exe 620 Console 1 32,996 K wininit.exe 628 Services 0 4,144 K winlogon.exe 656 Console 1 6,692 K services.exe 724 Services 0 8,568 K lsass.exe 732 Services 0 11,756 K svchost.exe 804 Services 0 11,556 K svchost.exe 844 Services 0 9,336 K dwm.exe ************************************************** 請(qǐng)輸入命名:dir 服務(wù)器返回來的數(shù)據(jù): 948 Console 1 24,656 K nvvsvc.exe 956 Services 0 2,648 K nvxdsync.exe 1000 Console 1 7,264 K nvvsvc.exe 1008 Console 1 1,684 K svchost.exe 276 Services 0 31,996 K svchost.exe 392 Services 0 48,924 K svchost.exe 412 Services 0 25,584 K svchost.exe 736 Services 0 49,284 K RtkAudioService64.exe 1056 Services 0 4 K RAVBg64.exe 1076 Console 1 1,596 K RAVBg64.exe 1084 Console 1 1,432 K ZhuDongFangYu.exe 1128 Services 0 4,528 K svchost.exe 1280 Services 0 17,032 K spoolsv.exe **************************************************'''服務(wù)器端的結(jié)果: ''' 464 ************************************************** 9674 ************************************************** 464 **************************************************'''?????? 由上可知,dir命令返回的結(jié)果字節(jié)數(shù)是496,由tasklist運(yùn)行的結(jié)果字節(jié)數(shù)為9766個(gè),因此兩次的dir命令執(zhí)行的結(jié)果不一樣,因?yàn)榈诙蝑ir命令的結(jié)果與tasklist命令的結(jié)果混在了一起,產(chǎn)生了粘包現(xiàn)象。
?
簡(jiǎn)單的粘包原因如下圖:
總結(jié)
以上是生活随笔為你收集整理的学习笔记(10):Python网络编程并发编程-粘包现象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3D人脸识别
- 下一篇: 学习笔记(11):Python网络编程并