日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

socket通信原理 udpsocket使用編程

前言前文使用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)容與地址 。運行之后 , 效果如下所示:

socket通信原理 udpsocket使用編程



socket通信原理 udpsocket使用編程


    推薦閱讀