python网络编程:UDP方式传输数据
生活随笔
收集整理的這篇文章主要介紹了
python网络编程:UDP方式传输数据
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
UDP — 用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol),是一個無連接的簡單的面向數(shù)據(jù)報的運(yùn)輸層協(xié)議。
UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達(dá)目的地。
由于UDP在傳輸數(shù)據(jù)報前不用在客戶和服務(wù)器之間建立一個連接,且沒有超時重發(fā)等機(jī)制,故而傳輸速度很快。
開發(fā)環(huán)境:linux下pycharm3.5
測試:使用terminal終端測試
-
使用 nc -u ip 端口 進(jìn)行測試客戶端
-
使用 nc -lu ip 端口 進(jìn)行測試服務(wù)器端
1.udp服務(wù)器端接受一次數(shù)據(jù)
import socket# 設(shè)置服務(wù)器默認(rèn)端口號 PORT = 9002 # 創(chuàng)建一個套接字socket對象,用于進(jìn)行通訊 # socket.AF_INET 指明使用INET地址集,進(jìn)行網(wǎng)間通訊 # socket.SOCK_DGRAM 指明使用數(shù)據(jù)協(xié)議,即使用傳輸層的udp協(xié)議 server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) address = ("", PORT) # 為服務(wù)器綁定一個固定的地址,ip和端口 server_socket.bind(address) # 接收客戶端傳來的數(shù)據(jù) recvfrom接收客戶端的數(shù)據(jù),默認(rèn)是阻塞的,直到有客戶端傳來數(shù)據(jù) # recvfrom 參數(shù)的意義,表示最大能接收多少數(shù)據(jù),單位是字節(jié) # recvfrom返回值說明 # receive_data表示接受到的傳來的數(shù)據(jù),是bytes類型, receive_data.decode()解碼,將bytes類型轉(zhuǎn)換為字符串類型 # client_address 表示傳來數(shù)據(jù)的客戶端的身份信息,客戶端的ip和端口,元組 receive_data, client = server_socket.recvfrom(1024)print("來自客戶端%s,發(fā)送的%s" % (client, receive_data.decode())) # 不再接收數(shù)據(jù)的時候,將套接字socket關(guān)閉 server_socket.close()測試:
2.udp服務(wù)端循環(huán)多次接受數(shù)據(jù)
3.udp客戶端接受一次數(shù)據(jù)
import socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) msg = input("請輸入要發(fā)送的內(nèi)容:") # 字符串類型, 通過msg.encode() 編碼 轉(zhuǎn)換為bytes類型 server_address = ("127.0.0.1", 8000) # 接收方 服務(wù)器的ip地址和端口號 client_socket.sendto(msg.encode(), server_address) client_socket.close()4.udp客戶端循環(huán)多次接受數(shù)據(jù)
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' import socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True:msg = input("請輸入要發(fā)送的內(nèi)容:") server_address = ("192.168.79.127", 8000) client_socket.sendto(msg.encode(), server_address)5.udp服務(wù)器端循環(huán)多次接受發(fā)送數(shù)據(jù)
import socketPORT = 8000 server_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("接收到了客戶端d %s 傳來的數(shù)據(jù): %s" % (client_address, receive_data.decode()))server_socket.sendto(receive_data, client_address)6.udp客戶端循環(huán)多次接受發(fā)送數(shù)據(jù)
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' import socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)while True:msg = input("請輸入要發(fā)送的內(nèi)容:")server_address = ("", 8000) client_socket.sendto(msg.encode(), server_address) receive_data, sender_address = client_socket.recvfrom(1024)print("接受到了發(fā)送方 %s 傳來的數(shù)據(jù): %s" % (sender_address, receive_data.decode()))總結(jié)
以上是生活随笔為你收集整理的python网络编程:UDP方式传输数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用python-opencv实现简单的车
- 下一篇: Python:初始函数