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...