您好,登錄后才能下訂單哦!
講到UDP和TCP之前咱們先了解一下socket
Socket
socket簡(jiǎn)稱套接字,是進(jìn)程間通信的一種方式。與其他的方式的進(jìn)程間的通訊的方式不同的是,socket是實(shí)現(xiàn)了主機(jī)間進(jìn)程間的通訊。我們網(wǎng)絡(luò)上的各種服務(wù)都是基于socket來(lái)完成的。例如QQ.微信。
怎么樣創(chuàng)建socket呢。
創(chuàng)建一個(gè)tcpsocket:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
創(chuàng)建一個(gè)UDP類(lèi)型的socket;
# # 創(chuàng)建套接字 # udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
UDP介紹
udp—–數(shù)據(jù)報(bào)文協(xié)議,是一個(gè)無(wú)連接的簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議,UDP不提供可靠性,他只是將應(yīng)用程序傳送給IP層的數(shù)據(jù)報(bào)文發(fā)送出去,并不保證能否達(dá)到目的地。由于UDP在傳輸?shù)倪^(guò)程中不需要和服務(wù)器建立鏈接。且沒(méi)有超時(shí)重發(fā)的的機(jī)制。故而傳輸很快。
下面簡(jiǎn)單通過(guò)示意圖來(lái)研究一下UDP。
UDP 發(fā)送數(shù)據(jù)
import socket # 設(shè)置socket udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 設(shè)置目的端口和IP sendArr = ('192.168.31.174',65535) sendData = input('請(qǐng)輸入你要發(fā)送的信息') # 發(fā)送數(shù)據(jù),此處有一個(gè)坑是sendto()里面的參數(shù)必須二進(jìn)制數(shù)據(jù),不能直接傳字符串 udpSocket.sendto(sendData.encode('utf-8'),sendArr) udpSocket.close()
UDP 接收數(shù)據(jù)
import socket # 創(chuàng)建UDP套接字 udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 綁定端口號(hào) udpSocket.bind(("", 7789)) recvData = udpSocket.recvfrom(1024) content, destInfo = recvData print("content is %s"%content) print("content is %s"%content.decode("utf-8")) print(recvData) udpSocket.close()
從打印結(jié)果我們可以看出recvData中包含是一個(gè)元祖,元祖接收到數(shù)據(jù)方ip.和端口號(hào)的。
發(fā)送通過(guò)端口號(hào)和IP將數(shù)據(jù)發(fā)送給接收方,接收方監(jiān)聽(tīng)端口,這樣就完成一次UDP通信的過(guò)程,這個(gè)過(guò)程涉及到,發(fā)送方組包,接收解包的過(guò)程。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。