王振2020 6 5筆記

2021-10-06 22:19:32 字數 4330 閱讀 4836

# ### 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擋,檔位切換要等多久?...