前言前文使用TCP面向流的套接字 , 今天講解的UDP的工作方式與TCP/IP不同 。UDP是用戶數(shù)據(jù)報協(xié)議 , 是一個面向消息的協(xié)議 。
一方面 , UDP不需要一個長期活動連接 , 所以建立UDP套接字稍微簡單一些 。另一方面 , UDP消息必須放在一個數(shù)據(jù)報中 。
在IPv4中 , 數(shù)據(jù)報包含65507個字節(jié) , 這些字節(jié)信息中還包括首部信息 。因為UDP不需要長期的連接 , 所以它無法得到TCP所能提供的傳輸保障 。
服務(wù)器代碼因為UDP并沒有連接 , 所以服務(wù)器不需要監(jiān)聽和接收連接 。它只需要使用bing()將其套接字與一個端口關(guān)聯(lián) , 然后等待各個消息 。
示例代碼如下:
import socket# 1.創(chuàng)建一個套接字 , sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)sock.bind(('localhost', 10000))while True:data, address = sock.recvfrom(4096)print(data.decode('UTF-8'), address)if data:sent = sock.sendto('已接收到你發(fā)來的消息'.encode('UTF-8'), address)其中 , recvfrom()表示從套接字讀取消息 , 比如客戶但發(fā)送消息后 , 消息與客戶但地址都在里面 。
至于sendto()很好理解 , 就是發(fā)送消息給別人 。參數(shù)1表示消息內(nèi)容 , 參數(shù)2就是發(fā)送到哪里(也就是對方的地址) 。
客戶端代碼客戶端當(dāng)然比服務(wù)器更簡單 , 因為UDP不需要連接 , 可以直接將消息發(fā)送到服務(wù)器 , 并使用recvfrom()響應(yīng) 。示例如下:
import socketsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)try:msg = "發(fā)送消息到服務(wù)器".encode('utf-8')sent = sock.sendto(msg, ('localhost', 10000))data, server = sock.recvfrom(4096)print(data.decode())finally:sock.close()【socket通信原理 udpsocket使用編程】同樣的 , 這里sock.recvfrom()用于接收服務(wù)器反饋的消息內(nèi)容與地址 。運行之后 , 效果如下所示:


推薦閱讀
- wifi廣告機的聯(lián)網(wǎng)方法 wifi熱點廣告機原理
- 性傳播什么東西原理
- 性傳播疾病的原理是什么呢
- 自行車的剎車是杠桿原理嗎
- 人民日報批通信套餐亂象 套餐更換升級容易降檔難
- 英雄聯(lián)盟手游雙通道通信模式有什么用 lol手游雙通道通信模式作用介紹
- 孢子香料采集車怎么造 孢子香料采集車制造原理分享
- 全球行動通行證升級攻略 全球行動通信證怎么快速升級
- 控制通信部怎么過去 控制去通信部的方法
- 微軟飛行模擬飛行原理是什么 微軟飛行模擬飛機飛行原理介紹
