python網路編程之UDP方式傳輸資料

來源:互聯網
上載者:User

標籤:建立   ima   開發   資料報   機制   class   terminal   arm   while   

UDP --- 使用者資料包通訊協定(User Datagram Protocol),是一個不需連線的簡單的面向資料報的運輸層協議。

UDP不提供可靠性,它只是把應用程式傳給IP層的資料報發送出去,但是並不能保證它們能到達目的地。

由於UDP在傳輸資料報前不用在客戶和伺服器之間建立一個串連,且沒有逾時重發等機制,故而傳輸速度很快。

開發環境:linux下pycharm3.5 

測試:使用terminal終端測試

使用 nc -u ip 連接埠 進行測試用戶端

使用 nc -lu ip 連接埠 進行測試伺服器端

 

1.udp伺服器端接受一次資料

import socket# 設定伺服器預設連接埠號碼PORT = 9002# 建立一個通訊端socket對象,用於進行通訊# socket.AF_INET 指明使用INET地址集,進行網間通訊# socket.SOCK_DGRAM 指明使用資料協議,即使用傳輸層的udp協議server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)address = ("", PORT)# 為伺服器綁定一個固定的地址,ip和連接埠server_socket.bind(address)# 接收用戶端傳來的資料 recvfrom接收用戶端的資料,預設是阻塞的,直到有用戶端傳來資料# recvfrom 參數的意義,表示最大能接收多少資料,單位是位元組# recvfrom傳回值說明# receive_data表示接受到的傳來的資料,是bytes類型, receive_data.decode()解碼,將bytes類型轉換為字串類型# client_address 表示傳來資料的用戶端的身份資訊,用戶端的ip和連接埠,元組receive_data, client = server_socket.recvfrom(1024)print("來自用戶端%s,發送的%s" % (client, receive_data.decode()))# 不再接收資料的時候,將通訊端socket關閉server_socket.close()

測試:

2.udp服務端迴圈多次接受資料

import socketPORT = 9002server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)address = ("192.168.219.129", PORT)server_socket.bind(address)while True:    receive_data, client_address = server_socket.recvfrom(1024)    print("接收到了用戶端 %s 傳來的資料: %s" % (client_address, receive_data.decode()))

 

3.udp用戶端接受一次資料

import socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)msg = input("請輸入要發送的內容:")  # 字串類型, 通過msg.encode() 編碼 轉換為bytes類型server_address = ("127.0.0.1", 8000)  # 接收方 伺服器的ip地址和連接埠號碼client_socket.sendto(msg.encode(), server_address)client_socket.close()

 

4.udp用戶端迴圈多次接受資料

import socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)while True:    msg = input("請輸入要發送的內容:")       server_address = ("192.168.79.127", 8000)      client_socket.sendto(msg.encode(), server_address)

 

5.udp伺服器端迴圈多次接受發送資料

import socketPORT = 8000server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)address = ("", PORT)server_socket.bind(address)while True:    receive_data, client_address = server_socket.recvfrom(1024)    print("接收到了用戶端 %s 傳來的資料: %s" % (client_address, receive_data.decode()))    server_socket.sendto(receive_data, client_address)

 

6.udp用戶端迴圈多次接受發送資料

import socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)while True:    msg = input("請輸入要發送的內容:")    server_address = ("", 8000)     client_socket.sendto(msg.encode(), server_address)    receive_data, sender_address = client_socket.recvfrom(1024)    print("接受到了發送方 %s 傳來的資料: %s" % (sender_address, receive_data.decode()))

 

python網路編程之UDP方式傳輸資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.