Python實現輕量級WEB服務器接收HTTP提交的RFID刷卡信息并回應驅動讀卡器顯示播報語音

?本示例使用的設備:RFID網絡WIFI無線TCP/UDP/HTTP可編程二次開發讀卡器POE供電語音-淘寶網 (taobao.com)

# -*- coding: utf-8 -*-
import time
import datetime
import socket
import threading#將中文信息轉換編碼,顯示文字、TTS語音都需要轉換--------------------------------------------------
def GetChineseCode(inputstr):sdata = bytes(inputstr, encoding='gbk')  # 將中文信息轉為byteshexcode=""for num in range(0, len(sdata)):if num % 2==0:hexcode=hexcode+"\\x"hexcode=hexcode+ '%02X' % (sdata[num])return hexcode#獲取電腦系統日期時間---------------------------------------------------------------------------
def get_time():st = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())st=st[2:19]return st# 接收讀卡器發過來的http請求、解析提交上來的信息、回應并驅動讀卡器顯示文字播報語音--------------------------
def service_client(new_socket):request = new_socket.recv(1024).decode('utf-8')request_header_lines = request.splitlines()requestlines=len(request_header_lines)current_time = datetime.datetime.now()current_time_str = current_time.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]print(current_time_str)i = 0while i < requestlines:     #打印出提交信息print(request_header_lines[i])i += 1print("\n")if request[0:3]=="GET":CommitParameter=request_header_lines[0][request_header_lines[0].find("?")+1:request_header_lines[0].find("HTTP/1.1")-1]elif request[0:4]=="POST":CommitParameter = request_header_lines[requestlines-1]if request_header_lines[5]=="Content-Type: application/json":CommitParameter = CommitParameter.replace("{", "")        #JSON信息可以引用JSON類來解析,此處統一轉化成字符串處理CommitParameter = CommitParameter.replace("\"", "")CommitParameter = CommitParameter.replace(":", "=")CommitParameter = CommitParameter.replace(",", "&")CommitParameter = CommitParameter.replace("}", "")FieldsList = CommitParameter.split('&')for num in range(0, len(FieldsList)):ParaList=FieldsList[num].split('=')if ParaList[0]=="info":info=ParaList[1]        #接收到的數據包號,需回應該包號elif ParaList[0]=="jihao":jihao = ParaList[1]     #設備機號(可自編)elif ParaList[0]=="cardtype":cardtype = ParaList[1]typenum=int(cardtype,16) % 16               #typenum=1 ID卡,2 HID卡,3 T5557卡,4 EM4305卡,5 IC卡,6 二代身份證,7 是15693卡,IClass"pushortake=int(int(cardtype,16) / 128)      #pushortake=0 表示讀卡,>0表示卡離開感應區elif ParaList[0]=="card":card = ParaList[1]      #接收到的原始16進制卡號,可根據需要自行轉換成其他卡號elif ParaList[0]=="data":data = ParaList[1]      #讀取的卡扇區內容elif ParaList[0]=="dn":dn = ParaList[1]        #設備硬件序列號,出廠時已固化,全球唯一elif ParaList[0]=="status":status = ParaList[1]    #讀卡狀態,如密碼認證失敗為12if pushortake == 0:ChineseVoice = GetChineseCode("讀取卡號[n1]") + cardelse:ChineseVoice = GetChineseCode("卡號[n1]") + card + GetChineseCode("離開感應區")# Response=1,是固定的回應頭信息+接收到的包序號+顯示文字 中文要轉換編碼 {}中的文字可以高亮顯示+顯示延時秒+蜂鳴器響聲代碼+[v8]表示本次語音大小 取值 v1 到 v16 TTS中文語音編碼ResponseStr="Response=1,"+info+",{"+GetChineseCode("卡號")+":}"+(card+"        ")[0:12]+get_time()+",20,1,[v8]"+ChineseVoicenew_socket.send(ResponseStr.encode("gbk"))new_socket.close()print(ResponseStr+"\r\n")def main():# 用來完成整體的控制tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)       # 1.創建套接字tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)     # 設置當服務器先close 即服務器端4次揮手之后資源能夠立即釋放,這樣就保證了,下次運行程序時 可以立即綁定設定的端口tcp_server_socket.bind(("", 88))                                            # 2.綁定監聽端口tcp_server_socket.listen(128)                                               # 3.變為監聽套接字while True:new_socket, client_addr = tcp_server_socket.accept()                    # 4.等待新客戶端的鏈接t = threading.Thread(target=service_client, args=(new_socket,))         # 5.為這個客戶端服務t.start()tcp_server_socket.close()       # 關閉監聽套接字if __name__ == '__main__':main()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41429.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從入門到精通Python隧道代理的使用與優化

哈嘍&#xff0c;Python爬蟲小伙伴們&#xff01;今天我們來聊聊如何從入門到精通地使用和優化Python隧道代理&#xff0c;讓我們的爬蟲程序更加穩定、高效&#xff01;今天我們將對使用和優化進行一個簡單的梳理&#xff0c;并且會提供相應的代碼示例。 1. 什么是隧道代理&…

SpringCloud Gateway:status: 503 error: Service Unavailable

使用SpringCloud Gateway路由請求時&#xff0c;出現如下錯誤 yml配置如下&#xff1a; 可能的一種原因是&#xff1a;yml配置了gateway.discovery.locator.enabledtrue&#xff0c;此時gateway會使用負載均衡模式路由請求&#xff0c;但是SpringCloud Alibaba刪除了Ribbon的…

無涯教程-Perl - setpwent函數

描述 此功能將枚舉設置(或重置)到密碼條目集的開頭。應該在第一次調用getpwent之前調用此函數。 語法 以下是此函數的簡單語法- setpwent返回值 此函數不返回任何值。 例 以下是顯示其基本用法的示例代碼- #!/usr/bin/perlwhile(($name, $passwd, $uid, $gid, $quota, …

C++寫文件,直接寫入結構體

C寫文件&#xff0c;直接寫入結構體 以前寫文件都是寫入字符串或者二進制再或者就是一些配置文件&#xff0c;今天介紹一下直接寫入結構體&#xff0c;可以在軟件參數較多的時候直接進行讀寫&#xff0c;直接將整個結構體寫入和讀取&#xff0c;看代碼&#xff1a; #include&…

tomcat中的BIO與NIO發展

tomcat中的NIO發展 前言 Tomcat目前支持BIO&#xff08;阻塞 I/O&#xff09;、NIO&#xff08;非阻塞 I/O&#xff09;、AIO&#xff08;異步非阻塞式IO&#xff0c;NIO的升級版&#xff09;、APR&#xff08;Apache可移植運行庫&#xff09;模型&#xff0c;本文主要介紹NI…

iceberg系列之 hadoop catalog 小文件合并實戰

背景 flink1.15 hadoop3.0pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…

UBuntu18.04 Qt之雙HDMI屏切換

UBuntu18.04 Qt之雙HDMI接2個4K屏并分別設置分辨率、主屏、副屏 一、設置HDMI-2為主屏 在main函數里面添加&#xff1a; #include "mainwindow.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);{long nTotal 0;c…

spring cloud gateway中配置uri

gateway中配置uri配置有三種方式: websocket方式&#xff1a;uri: ws://localhost:9000http方式: uri: http://localhost:8130/lb注冊中心配置方式&#xff08;注冊的服務名稱&#xff09;: uri: lb://monitor-ms gateway的lb方式識別的服務名稱命名規則&#xff1a; "[…

設計模式——適配器模式

引入實例 說起適配器其實在我們的生活中是非常常見的&#xff0c;比如&#xff1a;學校的宿舍的電壓都比較低&#xff0c;而有的學生想使用大功率電器&#xff0c;宿舍的就會跳閘&#xff0c;然而如果你使用一個適配器&#xff08;變壓器&#xff09;就可以使用了&#xff08;…

Jtti:windows虛擬內存最小值太低如何解決

當Windows虛擬內存的最小值設置過低時&#xff0c;可能會導致系統性能下降、應用程序崩潰甚至系統不穩定。解決方法包括&#xff1a; 調整虛擬內存設置&#xff1a; 可以通過以下步驟調整虛擬內存的設置&#xff1a; 右鍵點擊“此電腦”或“計算機”&#xff0c;選擇“屬性”。…

被迫學習一波Linux命令

事情起因 部署一個服務&#xff0c;人家說了最低配置是3G&#xff0c;我沒當回事&#xff0c;拿著個2G的服務器直接就上了&#xff0c;結果&#xff0c;哈哈&#xff0c;都能猜到結果&#xff1a;服務器內存爆了&#xff01;&#xff01;&#xff01;而且最可氣的是服務器還登…

ansible案列之LNMP分布式劇本

LNMP分布式劇本 一&#xff1a;環境設置二&#xff1a;編寫Nginx劇本準備nginx下載源準備配置文件并開放PHP的訪問路徑準備php測試頁面編寫nginx劇本 三&#xff1a;編寫Mysql劇本編寫密碼獲取腳本準備Mysql的yum源編寫mysql劇本 四&#xff1a;準備PHP劇本準備兩個配置文件編寫…

深入理解linux內核--塊設備驅動程序

塊設備的處理 塊設備驅動程序上的每個操作都涉及很多內核組件&#xff1b;其中最重要的一些如圖14-1所示。 例如&#xff0c;我們假設一個進程在某個磁盤文件上發出一個read()系統調用 ——我們將會看到處理write請求本質上采用同樣的方式。 下面是內核對進程請求給予回應的一…

煤礦調度IP語音對講廣播模塊一鍵求助對講礦用調度通信系統SIP語音對講求助終端

硬件接口描述 SV-2101VP/ SV-2103VP系列網絡音頻模塊&#xff0c;所有外部連接采用端子&#xff0c;電源采用2.0mm的端子&#xff0c;網絡采用標準RJ45連接器&#xff0c;其他都是1.25mm的連接器。 端口類型定義 P ———— 電源 AI ———— 模擬輸入&#xff08;在這里是音…

微信小程序前后端開發快速入門(完結篇)

這篇是微信小程序前后端快速入門完結篇了&#xff0c;今天利用之前學習過的所有知識做一個新的項目「群登記助手v1.0」小程序。 整體技術架構&#xff1a;小程序原生前端小程序云開發。 經歷了前面教程的學習&#xff0c;大家有了一定的基礎&#xff0c;所以本次分享重心主要是…

Ubuntu服務器service版本初始化

下載 下載路徑 官網&#xff1a;https://cn.ubuntu.com/ 下載路徑&#xff1a;https://cn.ubuntu.com/download 服務器&#xff1a;https://cn.ubuntu.com/download/server/step1 點擊下載&#xff08;22.04.3&#xff09;&#xff1a;https://cn.ubuntu.com/download/server…

【Python百日進階-Web開發-Peewee】Day271 - Peewee API文檔 - 字段(二)

文章目錄 11.3.17 class UUIDField11.3.18 class BinaryUUIDField11.3.19 class DateTimeField11.3.20 class DateField11.3.21 class TimeField11.3.22 class TimestampField11.3.23 class IPField11.3.24 class BooleanField11.3.25 class BareField11.3.26 class ForeignKey…

神經網絡基礎-神經網絡補充概念-06-計算圖

概念 “計算圖”&#xff08;Computational Graph&#xff09;是一種用于表示數學表達式計算過程的圖結構&#xff0c;廣泛用于深度學習和自動微分等領域。計算圖將復雜的數學表達式分解為一系列簡單的計算節點&#xff0c;這些節點之間通過邊連接&#xff0c;形成了一個有向無…

【jwt】JWT原理,JWT是用來解決什么問題的,如何自定義生成JWT數據,并且實現jwt數據的解碼

JWT&#xff1a; JSON Web Token 1. jwt概述 用戶登錄成功后&#xff0c;服務端 如何知道客戶端的每次請求對應的是哪個用戶呢&#xff1f;怎么做&#xff1a;目前有兩種方式實現. 1.1. 一是通過sessionId的方式&#xff0c;登錄成功后服務端返回sessionId給客戶端&#xff0…

【2023年11月第四版教材】《第5章-信息系統工程之數據工程(第三部分)》

《第5章-信息系統工程之數據工程&#xff08;第三部分&#xff09;》 2 數據工程2.1 數據建模2.2 數據標準化2.3 數據運維2.4 數據開發利用2.5 數據庫安全 2 數據工程 2.1 數據建模 1、根據模型應用目的不同&#xff0c;可以將數據模型劃分為三類:概念模型、邏輯模型和物理模…