網路程式設計之 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()
**總結: 無錫婦科檢查醫院
傳送資料步驟:
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()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2654578/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java網路程式設計--UDP傳送接收資料Java程式設計UDP
- Java網路程式設計之UDPJava程式設計UDP
- 玩轉 PHP 網路程式設計全套之資料接收與傳送PHP程式設計
- 網路程式設計-UDP程式設計UDP
- 【網路程式設計】Tcp/Udp程式設計TCPUDP
- java中UDP接收資料的步驟JavaUDP
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- 網路遊戲程式設計師須知 UDP vs TCP(轉)遊戲程式設計師UDPTCP
- 計算機網路之六:UDP協議計算機網路UDP協議
- UDP&TCP Linux網路應用程式設計詳解UDPTCPLinux程式設計
- 【網路程式設計】TCPIP-5-UDP程式設計TCPUDP
- 網路程式設計中TCP與UDP程式設計TCPUDP
- 網路程式設計UDP協議方式程式設計UDP協議
- Python網路程式設計——IP、UDPPython程式設計UDP
- UDP程式設計(八)UDP程式設計
- 【測試】echo傳送和接收TCP/UDP資料包|shell 傳送TCP/UDP資料包TCPUDP
- Java網路程式設計UDP通訊原理Java程式設計UDP
- 網路程式設計原理與UDP實現程式設計UDP
- 非同步 SOCKET 程式設計 - 傳送和接收資料 (轉)非同步程式設計
- 基於UDP程式設計UDP程式設計
- 好程式設計師大資料學習路線分享TCP和UDP學習筆記程式設計師大資料TCPUDP筆記
- 計算機網路 之 TCP和UDP的埠號解析計算機網路TCPUDP
- Java入門:UDP協議傳送/接收資料實現JavaUDP協議
- java傳送接收組播(多播)資料包(UDP包)JavaUDP
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- 計算機網路之資料鏈路層計算機網路
- 網路協議之:基於UDP的高速資料傳輸協議UDT協議UDP
- 不會程式設計?來用Excel抓取網路資料程式設計Excel
- UDP介紹及UDP傳送端和接收端廣播程式碼UDP
- iOS 網路程式設計(二)UDP協議小結iOS程式設計UDP協議
- 基於UDP協議的Socket網路程式設計UDP協議程式設計
- 一個基於UDP資料廣播的區域網路會議程式UDP
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- 網際網路資料庫架構設計資料庫架構
- 好程式設計師大資料學習路線分享大資料之字串程式設計師大資料字串
- Python 網路資料傳輸協議 TCP 程式設計Python協議TCP程式設計
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- Go Web 程式設計之 資料庫GoWeb程式設計資料庫