欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實(shí)現(xiàn)簡(jiǎn)單的udp發(fā)送和接收

 更新時(shí)間:2023年09月06日 09:27:30   作者:qq_278667286  
這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)單的udp發(fā)送和接收方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python簡(jiǎn)單的udp發(fā)送和接收

server端 

# udp_gb_server.py
'''服務(wù)端(UDP協(xié)議局域網(wǎng)廣播)'''
import socket,time,struct
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
PORT = 6454
network ='127.0.0.1'# '<broadcast>'
s.sendto('Client broadcast message!'.encode('utf-8'), (network, PORT))
def formatdata(dvcid,dat):
    sendBuf=[0x41, 0x72, 0x74, 0x2D, 0x4E, 0x65, 0x74, 0x00, 0x00, 0x50, 0x00, 0x0E, 0x77, 0x01]
    #sendBuf[14]設(shè)備節(jié)點(diǎn)
    #sendBuf[15] = 0x00;
    sendBuf.append(dvcid& 0xff)
    sendBuf.append(0x00)
    # 發(fā)送的字節(jié)數(shù) 512
    #sendBuf[16] = 0x02;
    #sendBuf[17] = 0x00;
    datlen = len(dat)
    sendBuf.append((datlen & 0xff00) >> 8)
    sendBuf.append(datlen & 0xff)
    # 發(fā)送的數(shù)據(jù)
    #sendBuf[17+n] = 0x00;
    print( datlen)
    for x in range(datlen):
        pass
        sendBuf.append((dat[x] & 0xff))#.to_bytes(1,'big')
    #data = [1, 2, 3]
    #buffer = struct.pack("!ihb", *data)
    packstyle=str(18+datlen)+'B'#B 0-255
    #req = struct.pack('14b',*sendBuf) 0-127
    req = struct.pack(packstyle, *sendBuf)
    return req
import struct
from ctypes import create_string_buffer
def pack():
    # 創(chuàng)建一個(gè)9字節(jié)大小的緩存區(qū),初始化默認(rèn)全部為\x00 
    buf = create_string_buffer(9)# buf.raw: '\x00\x00\x00\x00\x00\x00\x00\x00\x00'
    # 沖緩存區(qū)buf的第0個(gè)字節(jié)開始打包兩個(gè)4字節(jié)無符號(hào)整型數(shù)據(jù)1和2
    struct.pack_into(">II", buf, 0, 1, 2)#  buf.raw: '\x00\x00\x00\x01\x00\x00\x00\x02\x00'
    # 然后我們想再打包一個(gè)布爾型數(shù)據(jù)到buf中就可以改變以下偏移量
    struct.pack_into(">?", buf, 8, True)# buf.raw: '\x00\x00\x00\x01\x00\x00\x00\x02\x01'
    return buf
c=0
while True:
    c=c+1
    d=[200,1,2,3,4,5,6,7]
    #d = [0 for i in range(512)]
    a= []
    for i in range(512):
        a.append(i)#'''
    print(a)
    print(c)
    #senddata(2,d)
    req = struct.pack('8B', int('3F', 16), int('20', 16), int('63', 16), int('31', 16), int('0D', 16), int('0A', 16), int('0D', 16), int('0A', 16))
    #s.sendto((b"\x78\x78\x11\x01\x07\x52\x53\x36\x78\x90\x02\x42\x70\x00\x32\x01\x00\x05\x12\x79\x0D\x0A"),(network, PORT))
    #s.sendto(req, (network, PORT))
    s.sendto(formatdata(128,a), (network, PORT))
    #s.sendto(pack(), (network, PORT))
    time.sleep(1)
'''
byte[] sendBuf = new byte[530];//設(shè)置發(fā)送緩存區(qū)
            //41 72 74 2D 4E 65 74 00 00 50 00 0E 77 01
            //按照協(xié)議報(bào)文填充數(shù)據(jù)
            //固定格式
            sendBuf[0] = 0x41;
            sendBuf[1] = 0x72;
            sendBuf[2] = 0x74;
            sendBuf[3] = 0x2D;
            sendBuf[4] = 0x4E;
            sendBuf[5] = 0x65;
            sendBuf[6] = 0x74;
            sendBuf[7] = 0x00;
            sendBuf[8] = 0x00;
            sendBuf[9] = 0x50;
            sendBuf[10] = 0x00;
            sendBuf[11] = 0x0E;
            sendBuf[12] = 0x77;
            sendBuf[13] = 0x01;
            //設(shè)備節(jié)點(diǎn)
            if (Convert.ToInt16(textBox7.Text) > 0 && Convert.ToInt16(textBox7.Text) < 5)
            {
                sendBuf[14] = Convert.ToByte(Convert.ToInt16(textBox7.Text)-1);
            }
            else
            {
                MessageBox.Show("設(shè)備節(jié)點(diǎn)輸入有誤");
            }
            sendBuf[15] = 0x00;
            //發(fā)送的字節(jié)數(shù)
            sendBuf[16] = 0x02;
            sendBuf[17] = 0x00;
            //后面的字節(jié)就是DMX512對(duì)應(yīng)的512個(gè)通道的數(shù)據(jù)了
            if (Convert.ToInt16(textBox1.Text) >= 1 && Convert.ToInt16(textBox1.Text) <= 512 && Convert.ToInt16(textBox2.Text) >= 0 && Convert.ToInt16(textBox2.Text) <= 255)
            {
                sendBuf[17 + Convert.ToInt16(textBox1.Text)] = Convert.ToByte(textBox2.Text);
            }
            else
                MessageBox.Show("通道或數(shù)值參數(shù)輸入有誤");
'''

client端

# udp_gb_client.py
'''客戶端(UDP協(xié)議局域網(wǎng)廣播)'''
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
PORT = 6454
s.bind(('127.0.0.1', PORT))
print('Listening for broadcast at ', s.getsockname())
while True:
    data, address = s.recvfrom(65535)
    print('Server received from {}:{}'.format(address, data))

python之UDP編程

UDP --- 用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol),是一個(gè)無連接的簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快。

測(cè)試方法:使用terminal終端測(cè)試,使用 nc -u ip 端口 測(cè)試客戶端;使用 nc -lu ip 端口 測(cè)試服務(wù)器端

1.接收一次數(shù)據(jù)

import socket
# 設(shè)置服務(wù)器默認(rèn)端口號(hào)
PORT = 9002
# 創(chuàng)建一個(gè)套接字socket對(duì)象,用于進(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ù)器綁定一個(gè)固定的地址,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ù)的時(shí)候,將套接字socket關(guān)閉
server_socket.close()

測(cè)試

2.循環(huán)多次接收數(shù)據(jù)

import socket
PORT = 9002
server_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 傳來的數(shù)據(jù): %s" % (client_address, receive_data.decode()))

3.發(fā)送一次數(shù)據(jù)

import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
msg = input("請(qǐng)輸入要發(fā)送的內(nèi)容:")  # 字符串類型, 通過msg.encode() 編碼 轉(zhuǎn)換為bytes類型
server_address = ("127.0.0.1", 8000)  # 接收方 服務(wù)器的ip地址和端口號(hào)
client_socket.sendto(msg.encode(), server_address)
client_socket.close()

4.循環(huán)多次發(fā)送數(shù)據(jù)

import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
    msg = input("請(qǐng)輸入要發(fā)送的內(nèi)容:")   
    server_address = ("192.168.79.127", 8000)  
    client_socket.sendto(msg.encode(), server_address)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python返回?cái)?shù)組/List長(zhǎng)度的實(shí)例

    Python返回?cái)?shù)組/List長(zhǎng)度的實(shí)例

    今天小編就為大家分享一篇Python返回?cái)?shù)組/List長(zhǎng)度的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 基于opencv實(shí)現(xiàn)簡(jiǎn)單畫板功能

    基于opencv實(shí)現(xiàn)簡(jiǎn)單畫板功能

    這篇文章主要為大家詳細(xì)介紹了基于opencv實(shí)現(xiàn)簡(jiǎn)單畫板功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Python?搭建?FastAPI?項(xiàng)目的詳細(xì)過程

    Python?搭建?FastAPI?項(xiàng)目的詳細(xì)過程

    這篇文章主要介紹了Python搭建FastAPI項(xiàng)目的過程,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • python裝飾器簡(jiǎn)介及同時(shí)使用多個(gè)裝飾器的方法

    python裝飾器簡(jiǎn)介及同時(shí)使用多個(gè)裝飾器的方法

    這篇文章主要介紹了python裝飾器簡(jiǎn)介及同時(shí)使用多個(gè)裝飾器的方法,python支持一個(gè)函數(shù)同時(shí)使用多個(gè)裝飾器,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • OpenCV機(jī)器學(xué)習(xí)MeanShift算法筆記分享

    OpenCV機(jī)器學(xué)習(xí)MeanShift算法筆記分享

    這篇文章主要介紹了OpenCV機(jī)器學(xué)習(xí)MeanShift算法筆記分享,有需要的朋友可以借鑒參考下,希望可以對(duì)各位讀者的OpenCV算法學(xué)習(xí)能夠有所幫助
    2021-09-09
  • Python的高級(jí)Git庫 Gittle

    Python的高級(jí)Git庫 Gittle

    Gittle是一個(gè)高級(jí)純python git 庫。構(gòu)建在dulwich之上,提供了大部分的低層機(jī)制
    2014-09-09
  • python?實(shí)時(shí)獲取kafka消費(fèi)隊(duì)列信息示例詳解

    python?實(shí)時(shí)獲取kafka消費(fèi)隊(duì)列信息示例詳解

    這篇文章主要介紹了python實(shí)時(shí)獲取kafka消費(fèi)隊(duì)列信息,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Pandas-Cookbook 時(shí)間戳處理方式

    Pandas-Cookbook 時(shí)間戳處理方式

    今天小編就為大家分享一篇Pandas-Cookbook 時(shí)間戳處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 解決django后臺(tái)管理界面添加中文內(nèi)容亂碼問題

    解決django后臺(tái)管理界面添加中文內(nèi)容亂碼問題

    今天小編就為大家分享一篇解決django后臺(tái)管理界面添加中文內(nèi)容亂碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python裝飾器語法糖

    Python裝飾器語法糖

    今天小編就為大家分享一篇關(guān)于Python裝飾器語法糖,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評(píng)論