# ### tcp/udp協議
三次握手
syn 建立連線
ack 確認響應
fin 斷開連線
# 三次握手
客戶端傳送乙個請求,與服務端建立連線
服務端接受這個請求,並且響應與客戶端建立連線的請求
(服務端的響應和請求是在一次傳送當中完成的)
客戶端接受服務端的請求之後,把訊息在響應給服務端
接下來客戶端和服務端可以傳送資料了.
每傳送乙個資料出去,對應的主機都會有乙個回執訊息,確認資料的接受情況,
如果沒有得到回執訊息,該資料會重發一次,保證資料的完整.
不會一直不停的發下去,有時間最大允許週期.
# 四次揮手
客戶端向服務端傳送乙個請求訊息,斷開連線(代表客戶端沒有資料傳輸了)
服務端接受請求 , 發出響應
等到服務端所有資料收發完畢之後
服務端向客戶端傳送斷開連線的請求
客戶端接受請求 , 發出響應
等到2msl,最大報文生存時間之後
客戶端與服務端徹底斷開連線
<--
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
>
# ### socket 伺服器
"""客戶端和服務端在收發資料時,
一發一收是一對,否則會導致資料異常
send 傳送 recv接受
"""import socket
# 1.建立socket物件
sk = socket.socket(
)# 2.繫結對應的ip和埠(註冊網路,讓其他主機能夠找到)
"""127.0.0.1 代表本地ip"""
sk.bind(
("127.0.0.1"
,9001))
# 3.開啟監聽
sk.listen(
)# 4.建立三次握手
conn,addr = sk.accept(
)print
(conn,addr)
"""conn = addr = ('127.0.0.1', 61176)
"""# 5.收發資料(recv裡面的引數單位是位元組,代表一次最多接受多少資料)
res = conn.recv(
1024
)print
(res)
print
(res.decode(
"utf-8"))
# 6.四次揮手
conn.close(
)# 7.退還埠
sk.close(
)<--
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
->
# ### 客戶端
import socket
# 1.建立乙個socket物件
sk = socket.socket(
)# 2.與伺服器進行連線
sk.connect(
("127.0.0.1"
,9001))
# 3.傳送資料 (二進位制的位元組流)
sk.send(
"今天風和日麗,明天是大週末"
.encode(
"utf-8"))
# 4.關閉連線
sk.close(
)<--
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
-->
# ### 服務端
import socket
# type=socket.sock_dgram => 返回udp協議物件
# 1.建立udp物件
sk = socket.socket(
type
=socket.sock_dgram)
# 2.繫結位址埠號
sk.bind(
("127.0.0.1"
,9000))
# 3.接受訊息(udp作為服務端的時候,第一次一定是接受訊息)
msg,cli_addr = sk.recvfrom(
1024
)print
(msg.decode())
print
(cli_addr)
# ('127.0.0.1', 56184)
# 服務端給客戶端發訊息
msg =
"我是老爺們,我不好!"
sk.sendto(msg.encode(
), cli_addr )
# 4.關閉連線
sk.close(
)<--
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
>
# ### 客戶端
import socket
# type=socket.sock_dgram => 返回udp協議物件
# 1.建立udp物件
sk = socket.socket(
type
=socket.sock_dgram)
# 2.傳送資料
msg =
"大妹子,你好呀?"
# sendto(二進位制位元組流, (ip,埠) )
sk.sendto(msg.encode(),
("127.0.0.1"
,9000))
# 客戶端接受服務端發過來的資料
msg,ser_addr = sk.recvfrom(
1024
)print
(msg.decode())
print
(ser_addr)
# 3.關閉連線
sk.close(
)<--
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
>
# #### 資料出現粘包現象
利用struct解決粘包現象
import struct
"""pack:
把任意長度的數字轉化成居右4個位元組的固定長度的位元組流
unpack:
把4個位元組值恢復成原本的數字,返回是元組
"""# i => int 要轉化的當前資料時整型
"""pack的數值範圍不是無限的,上限大概在21個億左右,不要超過這個值"""
res = struct.pack(
"i",
999999999
)res = struct.pack(
"i",
1234343433
)res = struct.pack(
"i",
2100000011
)print
(res)
print
(len
(res)
)# i => 把對應的資料轉換成int, 最後返回元祖
tup = struct.unpack(
"i",res)
print
(tup[0]
)# (2100000011,)
"""#解決黏包場景:
應用場景在實時通訊時,需要閱讀此次發的訊息是什麼
#不需要解決黏包場景:
"""
教父3 筆記
教父3是一部很矯情的 原因在於教父3就是一部斬草不除根,然後還亮將禍患留在自己身邊,首領貼心照顧偏愛這個禍害,禍害長大了開始秘密禍害這個家族,然後首領還是不忍心處理掉這個禍害,忠心耿耿的手下被殺才布局讓手下去除掉禍害!大部分時間講述好萊塢的各種齷齪和骯髒,我猜想國內大部分是看電影過來的,如果以閱讀 ...
3 21 筆記 心得
課堂筆記 1函式內,區域性作用域 函式外,全域性作用域 2.this,指向誰,具體看誰呼叫這個函式 3.localstorage.setitem key,value 用於將key value鍵值對的方式插入localstorage中。4.localstorage.getitem key 讀取key的...
科目三筆記
1 起步 1左燈,喇叭3秒 2鬆手剎 3腳踩離合器和腳剎,掛一檔 先手剎,後檔位 4起步 問題 在轉彎時,加油掛2擋以及 3擋 還是轉彎過後直行,加油掛擋呢?2 左轉 右 速度在20碼上 3 加減檔 3 2 3 4 3 問題 1掛4檔後,加油到 38碼?2什麼時候從4擋掛到 3擋,檔位切換要等多久?...