Python學習筆記 16 3章 UDP程式設計

2021-08-28 08:19:00 字數 1513 閱讀 2193

1、概覽

tcp是建立可靠連線,並且通訊雙方都可以以流的形式傳送資料。相對tcp,udp則是面向無連線的協議。

使用udp協議時,不需要建立連線,只需要知道對方的ip位址和埠號,就可以直接發資料報。但是,能不能到達就不知道了。

雖然用udp傳輸資料不可靠,但它的優點是和tcp比,速度快,對於不要求可靠到達的資料,就可以使用udp協議。

和tcp類似,使用udp的通訊雙方也分為客戶端和伺服器。

1.1、

server

端 import threading,time,socket

def tcplink(sock, addr,data):

sock.sendto(('hello, %s!' % data.decode('utf-8')).encode('utf-8'),addr)

# 收到的資料加

hello

,發回去

print('connection from %s:%s closed.' % addr)

# 提示訊息

s = socket.socket(socket.af_inet, socket.sock_dgram)

# 建立

socket

物件 s.bind(('127.0.0.1', 9999))

# 繫結埠

print('bind udp on 9999...')

while true:

#服務端用

recvfrom()

方法返回資料和客戶端的位址與埠 #

這樣,伺服器收到資料後,直接呼叫sendto()就可以把資料用udp發給客戶端

data, addr = s.recvfrom(1024)

print('received from %s:%s.' % addr)

t=threading.thread(target=tcplink,args=(s,addr,data))

t.start()

1.2、

client

端 import socket

s = socket.socket(socket.af_inet, socket.sock_dgram)

for data in [b'michael', b'tracy', b'sarah']:

# 傳送資料

s.sendto(data, ('127.0.0.1', 9999))

# 接收資料,

客戶端接收資料還是用

recv()

方法 print(s.recv(1024).decode('utf-8'))

s.close()

結果:

可以看到,

udp是發一次資料建立一次連線

1.3、小結 udp的使用與tcp類似,但是不需要建立連線。此外,伺服器繫結udp埠和tcp埠互不衝突,也就是說,udp的9999埠與tcp的9999埠可以各自繫結。

Python學習筆記 12 10章 XML

1 概覽 xml雖然比json複雜,在web中應用也不如以前多了,不過仍有很多地方在用,所以,有必要了解如何操作xml。1 dom vs sax 操作xml有兩種方法 dom和sax。dom會把整個xml讀入記憶體,解析為樹,因此占用記憶體大,解析慢,優點是可以任意遍歷樹的節點。sax是流模式,邊讀...

Python學習筆記 20 2章 asyncio

1 概覽 asyncio 是python 3.4 版本引入的標準庫,直接內建了對非同步 io的支援 asyncio 的程式設計模型就是乙個訊息迴圈。我們從 asyncio 模組中直接獲取乙個 eventloop 的引用,然後把需要執行的協程扔到 eventloop 中執行,就實現了非同步io。1.1...

Python學習筆記 3 2章 迭代

這是學習廖雪峰老師python教程的學習筆記 1 概覽 如果給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代 iteration 當然,不止 list 和 tuple 可以迭代。只要是可迭代物件,無論有無下標,都可以迭代都。包括dict str...