第六章 網路程式設計 UDP協議

2022-05-17 07:39:07 字數 3726 閱讀 3233

udp協議

服務端

1

'''2

udp 協議 又稱 資料報協議 sock_dgram34

'''5

from socket import * #

一般不這樣做 會重名 但寫socket可以這樣寫 因為要用到太多 會有大量的socket.

67 server =socket(af_inet,sock_dgram)

8 server.bind(('

127.0.0.1

',8080)) #

ip和埠 要繫結 服務端固定的ip埠9#

server.listen() # 不需要 掛起的鏈結數 udp 沒連線

1011

#server.accept() # 不需要 因為udp就沒連線12#

while true:13#

conn,addr = server.accept() # 幹連線迴圈的活

1415

while

true:

16 data,client_addr = server.recvfrom(1024)

17print('

客戶端資料:

',data) #

我要知道誰給我發的

18'''

19(b'data', ('127.0.0.1', 51182))

20(b'hello', ('127.0.0.1', 51182))

21'''

22server.sendto(data.upper(),client_addr)

2324 server.close()

客戶端

1

'''2

udp 可以發空 資料報協議 說是發空,其實不是空 ,還有乙個ip 埠的資訊,發空時 帶個埠資訊

3tcp:不是一一對應的

4udp:是一一對應的 資料報 完整的

5'''

6from socket import * #

一般不這樣做 會重名 但寫socket可以這樣寫 因為要用到太多 會有大量的socket.

78 client =socket(af_inet,sock_dgram)9#

server.bind('127.0.0.1',8080) # ip和埠 要繫結 服務端固定的ip埠10#

server.listen() # 不需要 掛起的鏈結數 udp 沒連線

1112

#server.accept() # 不需要 因為udp就沒連線13#

while true:14#

conn,addr = server.accept() # 幹連線迴圈的活

1516

while

true:

17 msg = input('

>>>:

').strip() #

udp 可以發空 收到乙個空18#

if not msg:continue

19 client.sendto(msg.encode('

utf-8

'),('

127.0.0.1

',8080)) #

明確的指定發給誰 因為沒有連線了

2021 data,server_addr = client.recvfrom(1024)

22print('

服務端返回的資料:

',data,'

',server_addr)

23 server.close()

不會粘包的udp

服務端:
1

#-*- coding:utf-8 -*-

2'''

3udp 協議 又稱 資料報協議 sock_dgram

4sendto recvfrom 一一對應 資料報協議 沒有粘包問題 udp 資料不安全 有可能傳送資料 > 1024 或者網路異常 資料沒了

5tcp: 資料一定要可靠

6遠端執行命令78

udp協議:9qq

10查詢操作eg:網際網路上 查詢時間 ntp時間伺服器 udp協議 eg:查網域名稱 轉成ip 埠 dns伺服器走的就是udp協議 能保證查詢效率高 資料雖然不可靠

11ntp時間伺服器 dns伺服器 qq 都是udp

12'''13#

from socket import * # 一般不這樣做 會重名 但寫socket可以這樣寫 因為要用到太多 會有大量的socket.14#

15#server = socket(af_inet,sock_dgram)16#

server.bind(('127.0.0.1',8080)) # ip和埠 要繫結 服務端固定的ip埠17#

18#res1 = server.recvfrom(1024)19#

print('第一次:',res1)20#

res2 = server.recvfrom(1024)21#

print('第二次:',res2)

2223

from socket import * #

一般不這樣做 會重名 但寫socket可以這樣寫 因為要用到太多 會有大量的socket.

2425 server =socket(af_inet,sock_dgram)

26 server.bind(('

127.0.0.1

',8080)) #

ip和埠 要繫結 服務端固定的ip埠

2728 res1 = server.recvfrom(4)

29print('

第一次:

',res1)

30 res2 = server.recvfrom(1024)

31print('

第二次:

',res2)

客戶端:

1

'''2

udp 可以發空 資料報協議 說是發空,其實不是空 ,還有乙個ip 埠的資訊,發空時 帶個埠資訊

3tcp:不是一一對應的

4udp:是一一對應的 資料報 完整的額

5'''6#

from socket import * # 一般不這樣做 會重名 但寫socket可以這樣寫 因為要用到太多 會有大量的socket.7#

8#client = socket(af_inet,sock_dgram)9#

10#client.sendto(b'hello',('127.0.0.1',8080))11#

client.sendto(b'world',('127.0.0.1',8080))12#

client.close()

1314

from socket import * #

一般不這樣做 會重名 但寫socket可以這樣寫 因為要用到太多 會有大量的socket.

1516 client =socket(af_inet,sock_dgram)

1718 client.sendto(b'

hello

',('

127.0.0.1

',8080))

19 client.sendto(b'

world

',('

127.0.0.1

',8080))

20 client.close()

tcp vs udp

tcp基於鏈結通訊

udp無鏈結

第六章 網路配置

路由器的工作原理 1 路由器接收來自它連線的某個 的資料。2 路由器將資料向上傳遞。3 路由器檢查ip頭部中的目的位址,如果目的位址位於發出資料的那個網路,那麼路由器就放下被認為已經達到目的地的資料。4 如果資料要送往另乙個網路,那麼路由器就查詢路由表,以確定資料要 到的目的地。5 路由器確定哪個介...

程式設計第六章總結

一 主要內容摘要 1 for語句 for 表示式1 表示式2 表示式3 迴圈體語句 用途 在迴圈頂部進行迴圈條件測試,如果迴圈條件第一次迴圈就為假,則迴圈體一次也不執行,即用於實現當型迴圈控制結構。適用於迴圈次數已知 技術控制的迴圈。例 輸出1 100之間所有偶數 include using nam...

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...