1. 程式人生 > >Python學習筆記__16.3章 UDP編程

Python學習筆記__16.3章 UDP編程

編程語言 Python

# 這是學習廖雪峰老師python教程的學習筆記

1、概覽

TCP是建立可靠連接,並且通信雙方都可以以流的形式發送數據。相對TCP,UDP則是面向無連接的協議。

使用UDP協議時,不需要建立連接,只需要知道對方的IP地址和端口號,就可以直接發數據包。但是,能不能到達就不知道了。

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

和TCP類似,使用UDP的通信雙方也分為客戶端和服務器。

1.1server

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

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學習筆記__16.3章 UDP編程