您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么實現Udp接收數據”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么實現Udp接收數據”吧!
udp接收數據,網絡調試助手擔任發送方,但發送時需要對方的也就是虛擬機的ip 和端口,ip可以通過config獲取,那么如何讓一個程序擁有一個固定端口呢?
創建套接字的時候是沒有端口號的,好比買了手機沒有手機號,別人是找不到你的,所以要有一個固定的端口號,用udp_socket.bind()綁定一個端口
接下來寫程序,終端中:
vim 05 綁定端口用來接收數據.py
寫程序的思路: if name==“main”:
main()
然后再def main():
在這個函數里寫代碼。
用注釋來搭建流程
#1、創建套接字
#2、綁定一個本地信息
#3、接收數據
#4、打印接收到的數據
#5、關閉套接字
流程搭建完之后開始寫代碼,創建套接字的時候,用的是socket.XX,此時需要在代碼的最上方導入socekt,用到什么導什么,代碼不是從第一行開始寫的。
因為當代碼比較多的時候,比如200多行,不確定會用到什么,所以用到什么導入什么,用到什么再調什么。
1、udp綁定端口用來接收數據.py
代碼具體形式如下:
import socket
def main():
#1、創建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#2、綁定一個本地信息(udp ctrl n自動補全),必須綁定自己電腦的ip port其它電腦的不行
綁定的是一個元組,用localaddr變量表示,本地ip,綁定端口,端口號大于1024
localaddr =("",7788)
udp_socket.bind(localaddr)
#3、接收數據(發送數據是套接字.sendto 接收是套接字.recvfrom(1024),
1024表示本次接收的最大字節數),并用recv_data變量接收
recv_data = udp_socket.recvfrom(1024)
#4、打印接收到的數據
print(recv_data)
#5、關閉套接字
udp_socket.close()
if __name__=="__main__":
main()
代碼完成后,終端中python3 05 綁定端口用來接收數據.py 運行程序,此時由網絡調試助手發送過來的消息就可以在終端中收到,收到的內容顯示情況如下:
打印出來的數據即變量recv_data,是一個元組,第一個參數是發送的數據,第二個參數是一個小元組,是發送方的ip和端口。
想要在終端中只顯示接收到的數據,不顯示對方的ip 和端口,操作如下:
cp 05 綁定端口用來接收數據.py 06解析出接收到數據.py
2、解析出接收到數據.py
關于注釋:
如果在一行的開頭注釋,直接用# 后面跟上一個空格 再寫注釋內容
如果是在代碼后面注釋 代碼后面加兩個空格 再用# 跟上一個空格 再寫注釋內容
打印代碼調整時的思路:
print(“s% : s%”,%(send_addr,recv_msg))
但send_addr是一個元組,不能直接這樣用,需要用str(send_addr)來轉換
recv_msg也不能直接用,因為發送時是用編碼編成了bite類型,收到的也是bite類型,如果直接發送過來的是字母,可以收到,但是如果發送過來是漢字,收到的是亂碼,此時需要解碼,
recv_msg.decode(“utf-8”),但是此時用windows的網絡調試助手發送中文過來還是亂碼,因為windows不是用utf-8編碼的,用的是gbk編碼,所以此時解碼需要用gbk,即:recv_msg.decode(“gbk”)
如果將網絡調試助手放到ubantu中,解碼還是要用utf-8來解
import socket
def main():
#1、創建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#2、綁定一個本地信息
localaddr =("",7788)
udp_socket.bind(localaddr)
#3、接收數據
recv_data = udp_socket.recvfrom(1024)
recv_msg = recv_data[0] # 用來接收發送的內容
send_addr = recv_data[1] # 用來接收發送方的ip和port
#4、打印接收到的數據
#print(recv_data) # 此時打印的代碼需要注釋掉,重新調整
pint("s%:s%",%(str(send_addr),recv_msg.decode("gbk")))
#5、關閉套接字
udp_socket.close()
if __name__=="__main__":
main()
**總結:無錫婦科檢查醫院 http://www.87554006.com/
發送數據步驟:
1.創建套接字
2.發送數據
3.關閉套接字
接收數據步驟:
1.創建套接字
2.綁定本地的ip 端口
3.接收數據
4.打印套接字
想要在終端中循環一直接收數據,操作如下:
cp 06解析出接收到數據.py 07循環接收數據.py
vim 07循環接收數據.py
3、循環接收數據.py
想要循環接收,就要用while true ,對接收和打印代碼進行while true:
ESC 大V 上下箭頭選中,大于號向右縮進
import socket
def main():
#1、創建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#2、綁定一個本地信息
localaddr =("",7788)
udp_socket.bind(localaddr)
#3、接收數據
while True:
recv_data = udp_socket.recvfrom(1024)
recv_msg = recv_data[0] # 用來接收發送的內容
send_addr = recv_data[1] # 用來接收發送方的ip和port
#4、打印接收到的數據
pint("s%:s%",%(str(send_addr),recv_msg.decode("gbk")))
#5、關閉套接字
udp_socket.close()
if __name__=="__main__":
main()
到此,相信大家對“怎么實現Udp接收數據”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。