From 419f743a36ed953e5a188fa0e73166324dc2fd52 Mon Sep 17 00:00:00 2001 From: Jeff Chen Date: Fri, 26 Feb 2021 15:06:02 +0800 Subject: [PATCH] Add 2 code files, replace TCP-structure fig --- .../ch_wireshark/TCPFlowControlDemo/Server.py | 32 ++++++++++++++++++ .../ch_wireshark/TCPFlowControlDemo/client.py | 24 +++++++++++++ figure/chapters/wireshark/TCP-structure.png | Bin 10069 -> 20411 bytes 3 files changed, 56 insertions(+) create mode 100644 code/reference/ch_wireshark/TCPFlowControlDemo/Server.py create mode 100644 code/reference/ch_wireshark/TCPFlowControlDemo/client.py diff --git a/code/reference/ch_wireshark/TCPFlowControlDemo/Server.py b/code/reference/ch_wireshark/TCPFlowControlDemo/Server.py new file mode 100644 index 0000000..fa8b96f --- /dev/null +++ b/code/reference/ch_wireshark/TCPFlowControlDemo/Server.py @@ -0,0 +1,32 @@ +import socket +import time + +def recv_data(sock,length): + data=b'' + while len(data) < length: + more = sock.recv(length - len(data)) + if not more: + pass + #raise EOFError('Cannot RECV execpting data') + data += more + return data + + +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + +# 设置接收缓冲区大小为1024 +s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024) + +s.bind(('0.0.0.0', 9999)) +s.listen(1) +print("Sever listening on 9999...") +try: + sc, addr = s.accept() + while True: + rcvdata = recv_data(sc,16) + time.sleep(0.01) + pass + +finally: + sc.close() + s.close() diff --git a/code/reference/ch_wireshark/TCPFlowControlDemo/client.py b/code/reference/ch_wireshark/TCPFlowControlDemo/client.py new file mode 100644 index 0000000..de8f653 --- /dev/null +++ b/code/reference/ch_wireshark/TCPFlowControlDemo/client.py @@ -0,0 +1,24 @@ +import socket +import time + +ip_port = ("server", 9999) +data = "0123456789\n"*100 + +c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + +try: + c.connect(ip_port) + print("Connected.") + time.sleep(1) + i=0 + while i<10: + print("Send:"+data) + c.send(data.encode()) + i=i+1 + +finally: + print("Sent. Waiting....") + +while True: + time.sleep(0.001) + diff --git a/figure/chapters/wireshark/TCP-structure.png b/figure/chapters/wireshark/TCP-structure.png index cf32bf45433a2e3be10d632821bde654e7d06925..0bf5716d8a32c515c03dc77bd930b5d44a0c921b 100644 GIT binary patch literal 20411 zcmc$_c{tQx_&}$rBBq_2tlp+*aLLXX@ zq)~Q73uR5#Lh+pWxsRT1Eqva*7PhN|P=`fgrC zznzX$6_h{+vi9D79{!=h;1Op7ekm(~VmJysfe&h+J?k+{4RHeeK?VeniS|T-sW(+h z1)~aASAeU5Vp&ro8#AnwiavNId;1c>A48(MuRp7aN03{ng10}Yu8dFsgn%M_Qjk9d zRKjSeD<~--R5X+TeW3h*O$-A_2LC{rwVS6~koW%>j5TK>)y?bgdM2H{9Ecl4Dogcbf`$d4Zu=+c)NK8xq;?N z-aD&lY9FQ%n$idabv0#o zeLOMDIK&5yvP1gk1!kWxVz+uEBs27|#- zVd{7cAReWr4&E?uEHVh~hWDhI+L3JnOdW%9_J$10%%rnjH!bM zQPt5SJVb+H666_-HHKphgEaj}Ml^z>2dErk*lYD@&T14UQ5RZiRHJv9(Ilq2AVi8HR}MJY8cs#5`hZQuro141gZL15{*Kv@ql_f z5fw&2n%SuvlFh^L2I_`rRZAa#D+@G{h&Ko&m1cQaDA3ME_7!i?Y+#Bd8A z9Licvof3v2;6N8tWlfp|PTvYn!kQ8d!mMn;e69S$!fF2G2%Y%Vea8JBS5Zb{*)z`|MQ%FdSH!D>QQvvok@g3Ut^Mkrg7Ciom=97>C@ zHX@npYX*3jU~!IqSS6a3IT~YNVW{R~qHpS_g0M8UR5Ld5Mtgz!Y6j%6a7XoUvIho< zFf&3K(}>16B+A{!*ozwMiBiINXwXd5X>d0%S_s_Dz$aAQE<_orOhmi+hrtQK@NlYS zIL2Mo+C#$w9~d5}O7#nZn?DSO-=Kf(wbBs|q&5Wk5sfo6?&_`Gkl+acPH?kUF zH+MTL(5sqPke>%U06bwWFlG^&2o=0agoSOW2hvlSO2AQY!5DvcUlTxUs1*SNjxYwN zOhuRwXpPEK8I6F^dm16arku z#ztA)!-#A}Gzy6D_71nQCIihH>Sz>f&ysW+rlI;8SbI|f!Nfx?+%wP~9~2mD?8RC_ zPa~>2)n6U2X+;aQv@+Gi8W`FKsM%|hNkIrDPYk}!Oow~ffIv1m6hNT!8lTdKDigysw3g>9X5*=<!ju>SVGq|lfsOauV zA%@@qNgApSZh?WpJ|wtCL|8ZrJ_Lh-Rn%1MtwPaiUcm;cZb}w76>n?+iDc;*ObYO} zHr5XXu*WDOh$T4OO@a)t#&~linrv=sqK0-eP!7X}csYcdTX+#XY)q(r7G@zNWFXi+ zk_U}SAy72D+&;|x(NGr>*K&k`L+Z1mc5a8uW zMq_cB{wO7^m8Yt)a!9zPz8luV)}DZM0PXGlti#la`UIBFCLn-L0-%WX!@?l{0jht| z6?oslvTy_0K>T$!Hc>WXG}0#Q+|Q8FqW0*uvlLX|~;4EO&rQz6w>dTL1-N-^ask zow>jEfq|Eo*7QT&O}XOyZ>NKcmJ1>mG=COFwtd_D=iWZCnV-L-3WMK-kH1+j2o~fz z$SKOk4$))d;GIf&Typ8H6#n0rI5tjEQ3#I~`+uJcp?V~0QZ`*|r?wu6x%dBWd65lO z3a^vg|F@$!HdKPnPPI5aFHT-qAw$aTzixS9EB{sF)RKr}PVJZH(g(w{MvPYYEv++g zxJ~3xW@%y0`Te47@sgaNoIl0uM)k3 z)7Lmr?l;pZZE2X_!hD(c4)m8WJPWqx9F%xr67!{no_+&!uez%XJ#n84`2rG?Hoi=i zzG7s!-I}}lN0zTK2c;St-DuyvF@2pFkd52$&#e_;AAg(L)3#CkGgmULy?ajdW&)pJ z`j$4)MYERr_V9G?z=Vk^;vj@h0^UHX?3d6AEGZa+aUlWu8 zn(N^|JG{>pzXjRfRibPxQ@A#0(8;xPA_~AU)6^!Qc4}GZvoVl|

B9kv^A4oG?r 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 Yirj2$SZr#mfdV)%P9Bcc_QZsL0n@wZ4*&oF literal 10069 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