Python編解碼16進制碼流的示例代碼
python編解碼16進制碼流
目前在做python + vue寫網(wǎng)站,最近遇到了用python代碼編解碼16進制的碼流,與c語言程序進行交互
自己寫了一個簡易版的客戶端與服務(wù)端的python代碼,利用到了 struct socket庫,因為使用的是udp,所以就簡單的調(diào)用一下庫
服務(wù)端代碼
import socket
import struct
# 創(chuàng)建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 9999)
# 綁定地址和端口
server_socket.bind(server_address)
while True:
print('Waiting for data...')
data, client_address = server_socket.recvfrom(1024)
# 打印接收到的原始數(shù)據(jù)的16進制碼流
print(f'Received raw data: {data.hex()}')
# 解析收到的數(shù)據(jù)
name, age = struct.unpack('BB', data) # 'BB'表示兩個unsigned char
# 修改數(shù)據(jù)
name = (name + 1) % 256
age = (age + 1) % 256
# 重新打包數(shù)據(jù)
modified_data = struct.pack('BB', name, age)
# 打印修改后的數(shù)據(jù)的16進制碼流
print(f'Modified data: {modified_data.hex()}')
# 發(fā)送修改后的數(shù)據(jù)回客戶端
server_socket.sendto(modified_data, client_address)客戶端代碼
import socket
import struct
# 創(chuàng)建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 9999)
# 構(gòu)建數(shù)據(jù)結(jié)構(gòu)并打包
name = 100
age = 25
data = struct.pack('BB', name, age)
# 打印發(fā)送的數(shù)據(jù)的16進制碼流
print(f'Sending data: {data.hex()}')
# 發(fā)送數(shù)據(jù)
client_socket.sendto(data, server_address)
# 接收服務(wù)端響應(yīng)
modified_data, server_address = client_socket.recvfrom(1024)
# 打印服務(wù)端響應(yīng)的數(shù)據(jù)的16進制碼流
print(f'Received modified data: {modified_data.hex()}')
# 解析服務(wù)端響應(yīng)的數(shù)據(jù)
modified_name, modified_age = struct.unpack('BB', modified_data)
print(f'Modified Name: {modified_name}')
print(f'Modified Age: {modified_age}')
# 關(guān)閉套接字
client_socket.close()定時器(apscheduler)定時發(fā)送
加上定時器之后服務(wù)端代碼是一樣的, 客戶端代碼我設(shè)定的是10s發(fā)送一次
代碼如下:
import socket
import struct
from apscheduler.schedulers.background import BackgroundScheduler
def send_data():
# 構(gòu)建數(shù)據(jù)結(jié)構(gòu)并打包
name = 100
age = 25
data = struct.pack('BB', name, age)
# 打印發(fā)送的數(shù)據(jù)的16進制碼流
print(f'Sending data: {data.hex()}')
# 發(fā)送數(shù)據(jù)
client_socket.sendto(data, server_address)
# 創(chuàng)建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 9999)
# 創(chuàng)建后臺調(diào)度器
scheduler = BackgroundScheduler()
scheduler.start()
# 添加定時發(fā)送數(shù)據(jù)的任務(wù),每10秒執(zhí)行一次
scheduler.add_job(send_data, 'interval', seconds=10)
try:
# 阻塞主線程,等待任務(wù)執(zhí)行
while True:
pass
except KeyboardInterrupt:
# 捕獲Ctrl+C信號,停止調(diào)度器并關(guān)閉套接字
scheduler.shutdown()
client_socket.close()
到此這篇關(guān)于Python編解碼16進制碼流的示例代碼的文章就介紹到這了,更多相關(guān)Python編解碼16進制碼流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jupyter notebook中如何添加Pytorch運行環(huán)境
這篇文章主要介紹了Jupyter notebook中如何添加Pytorch運行環(huán)境,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
Python re.findall中正則表達式(.*?)和參數(shù)re.S使用
本文主要介紹了Python re.findall中正則表達式(.*?)和參數(shù)re.S使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Python 使用PIL numpy 實現(xiàn)拼接圖片的示例
今天小編就為大家分享一篇Python 使用PIL numpy 實現(xiàn)拼接圖片的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05

