久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

中控考勤機(jī)SDK對接指南:C#調(diào)用與常見問題排查

中控考勤機(jī)SDK對接指南:C#調(diào)用與常見問題排查 簡介一套面向中控考勤機(jī)二次開發(fā)的完整資源包專為需要在Windows平臺使用C#或VB.NET構(gòu)建考勤管理系統(tǒng)的開發(fā)者準(zhǔn)備。資源包內(nèi)含SDK、API接口文檔及多種功能示例覆蓋設(shè)備連接、用戶注冊、考勤打卡記錄讀取、數(shù)據(jù)存儲與報(bào)表生成等核心模塊并提供了異常處理與錯誤排查思路適合從入門到進(jìn)階的中控設(shè)備開發(fā)人員。壓縮包共1264個(gè)文件大小約11.08MB以.cs源碼、.dll動態(tài)庫、.exe可執(zhí)行程序?yàn)橹魍瑫r(shí)包含.resx界面資源、.txt說明文檔、.bat注冊腳本及.mdb數(shù)據(jù)庫樣例目錄結(jié)構(gòu)清晰方便按需查閱。目前已有2617人學(xué)習(xí)/下載。借助該資源包開發(fā)者能快速理解中控SDK的調(diào)用方式熟悉TCP/IP通訊協(xié)議與考勤數(shù)據(jù)管理邏輯再配合現(xiàn)成例程與文檔可大幅縮短項(xiàng)目開發(fā)周期構(gòu)建出穩(wěn)定可用的考勤管理軟件。1. 中控考勤機(jī) SDK先確定通信方式再碰代碼中控考勤機(jī)在工廠、辦公室、工地門房幾乎隨處可見但把「中控考勤機(jī)開發(fā)文件 SDK文檔各種例子(C#)」這套資料拿到手之后你會發(fā)現(xiàn)事情遠(yuǎn)比想象中亂十幾份文檔、多個(gè)版本的動態(tài)庫、新舊不一的示例工程堆在一起官方寫例子時(shí)用的還是 .NET Framework 2.0 時(shí)代的代碼風(fēng)格。同一個(gè)項(xiàng)目有人用 COM 組件半小時(shí)就跑通讀打卡記錄有人在 P/Invoke 里卡了三天連不上設(shè)備。這篇筆記想做的事是把這套開發(fā)包的閱讀和使用順序講清楚先判斷設(shè)備型號和通信方式再決定走 COM 還是原生動態(tài)庫調(diào)用最后處理時(shí)區(qū)、編碼和重復(fù)數(shù)據(jù)這幾個(gè)容易被忽略的邊界問題。適合剛接手考勤對接、需要短時(shí)間內(nèi)部署同步功能的 C# 開發(fā)也順帶照顧想直接讀設(shè)備原始數(shù)據(jù)的熟手。2. SDK 包結(jié)構(gòu)拆解文檔、動態(tài)庫、示例代碼的優(yōu)先級和選擇2.1 先識別設(shè)備型號與通信方式USB、串口、TCP/IP 三選一打開代碼之前先看設(shè)備背面銘牌或者設(shè)備管理器里的硬件 ID。中控考勤機(jī)按通信方式大致分三類USB/串口一體機(jī)。設(shè)備機(jī)身帶 USB 口裝好驅(qū)動后在系統(tǒng)里映射成一個(gè)虛擬串口SDK 包對應(yīng)sdk_com.dll或類似名字的動態(tài)庫。TCP/IP 網(wǎng)口機(jī)。像 iFace 系列、部分帶網(wǎng)口的型號走局域網(wǎng)通信需要知道設(shè)備 IP默認(rèn)端口一般是 4370。純 USB 指紋儀/刷卡頭。這類設(shè)備不存完整考勤記錄只負(fù)責(zé)采集指紋或讀卡SDK 的調(diào)用方式跟前兩類差異很大。判斷方法很簡單設(shè)備管理器里如果出現(xiàn)“USB Serial Port”或者設(shè)備名里帶 ZK 字樣說明走串口映射沒有的話看設(shè)備有沒有網(wǎng)口然后ping 設(shè)備IP看通不通。這里有個(gè)常見誤判一體機(jī)雖然叫 USB但在驅(qū)動層面就是串口設(shè)備。很多人把它當(dāng) U 盤模式去枚舉結(jié)果找不到設(shè)備句柄。還有一部分老設(shè)備的 USB 驅(qū)動不裝好系統(tǒng)里根本不會出現(xiàn)串口號這時(shí)候Connect_Com指定任何波特率都沒用。通信方式?jīng)Q定后續(xù)所有代碼這一步不能偷懶。2.2 文檔、動態(tài)庫和示例代碼的匹配關(guān)系包內(nèi)文件大致分五類PDF/CHM 幫助文檔、C 頭文件.h、動態(tài)庫.dll、COM 組件安裝包、C# 示例工程.sln/.csproj。它們的關(guān)系是動態(tài)庫負(fù)責(zé)底層實(shí)現(xiàn)頭文件聲明函數(shù)和數(shù)據(jù)結(jié)構(gòu)COM 組件把動態(tài)庫包裝成 C# 能直接引用的 ActiveX 控件示例工程展示完整調(diào)用順序。優(yōu)先級上我建議新手先讀示例工程再查幫助文檔最后翻頭文件。原因是官方示例代碼雖然寫得不優(yōu)雅但調(diào)用順序是對的——什么時(shí)候連接、什么時(shí)候讀數(shù)據(jù)、什么時(shí)候清緩存順序錯了后面全白搭。幫助文檔適合鎖定函數(shù)的具體參數(shù)類型頭文件則是你決定用 P/Invoke 繞過 COM 組件時(shí)才需要細(xì)看。這里要提醒版本匹配問題老設(shè)備配老 SDK、新設(shè)備配新 SDK 是基本原則。如果同一個(gè)項(xiàng)目里既有老機(jī)型又有新機(jī)型SDK 又是同一套優(yōu)先用頭文件版本較高的動態(tài)庫通常它向下兼容。COM 組件 32 位和 64 位的區(qū)別也在這個(gè)環(huán)節(jié)暴露出來后面第 5 章單獨(dú)講。如果動態(tài)庫版本和設(shè)備固件不匹配常見的現(xiàn)象是Connect_Net能連上但每次讀數(shù)據(jù)都返回空集合不報(bào)錯也不返回?cái)?shù)據(jù)。這時(shí)候查代碼查不出結(jié)果換一個(gè)匹配的 dll 往往當(dāng)場解決。2.3 從示例工程里看懂標(biāo)準(zhǔn)調(diào)用順序一個(gè)標(biāo)準(zhǔn)流程分五步初始化 COM 對象、連接設(shè)備、把設(shè)備端記錄讀到本機(jī)緩沖區(qū)、逐條取出記錄、讀完并確認(rèn)入庫后清緩存。示例工程里最常見的錯誤寫法是跳過后兩步導(dǎo)致數(shù)據(jù)永遠(yuǎn)讀不出來。對應(yīng)到代碼官方示例核心邏輯通常長這樣CZKEMClass zk new CZKEMClass(); bool bConnected zk.Connect_Net(192.168.1.201, 4370); if (bConnected) { zk.EnableDevice(1, true); bool bDataReady zk.SSR_GetGeneralAttendanceData(1); }注意兩件事EnableDevice(1, true)在某些固件里是“允許設(shè)備端接收命令”而不是單純開關(guān)設(shè)備SSR_GetGeneralAttendanceData只是把記錄從設(shè)備搬到本地內(nèi)存真正的字段讀取要靠后面循環(huán)里的 out 參數(shù)。示例代碼里會在一個(gè) while 循環(huán)里取字段直到返回 false這部分在第 3 章展開。2.4 先把官方示例原樣跑通再改成自己的業(yè)務(wù)邏輯拿到包以后我不建議立刻寫自己的代碼而是先把 C# 示例工程原樣編譯并運(yùn)行一次連一次真實(shí)設(shè)備。這一步能一次性驗(yàn)證四個(gè)問題SDK 版本是否匹配設(shè)備固件、COM 組件注冊是否正確、通信方式判斷是否準(zhǔn)確、數(shù)據(jù)讀取流程是否完整。這四個(gè)問題里任何一個(gè)是坑自己寫的代碼大概率也會翻車。我一般會先跑官方自帶的“讀全部記錄”類示例設(shè)置好 IP 和端口按下按鈕看能不能把設(shè)備里的考勤記錄全部讀出來。能讀出來說明設(shè)備和 SDK 鏈路是通的讀不出來先看示例里的錯誤碼再去查幫助文檔。等官方示例通了再到自己的業(yè)務(wù)代碼里復(fù)制調(diào)用流程保留連接、讀取、清理這三個(gè)環(huán)節(jié)把業(yè)務(wù)字段替換成自己的數(shù)據(jù)結(jié)構(gòu)。提示示例工程默認(rèn)的 .NET Framework 版本可能偏低打開時(shí)提示依賴缺失先確認(rèn)本機(jī)裝沒裝對應(yīng)版本的運(yùn)行時(shí)。但不要輕易把“平臺目標(biāo)”從 x86 改成 Any CPU前面說過 COM 組件可能是 32 位的。3. 從連接設(shè)備到讀取記錄C# 實(shí)操的三個(gè)關(guān)鍵步驟3.1 加載動態(tài)庫并初始化連接COM 方式是最省事的。在 Visual Studio 里“添加引用—瀏覽”找到zkemkeeper.dll確認(rèn)它出現(xiàn)在 COM 選項(xiàng)卡里然后代碼里直接創(chuàng)建對象CZKEMClass zk new CZKEMClass(); // 網(wǎng)絡(luò)方式IP 端口默認(rèn)端口 4370 bool isNetworkConnected zk.Connect_Net(192.168.1.201, 4370); // USB/串口方式串口號 波特率波特率常見 38400/57600/115200 bool isSerialConnected zk.Connect_Com(5, 115200);這段代碼有幾個(gè)隱含點(diǎn)。第一Connect_Net的超時(shí)時(shí)間是 SDK 內(nèi)部實(shí)現(xiàn)的接口層不暴露所以 IP 不通時(shí)調(diào)用會阻塞幾秒甚至幾十秒。常見做法是調(diào)用前自己先用TcpClient探一下 4370 端口using System.Net.Sockets; using System.Net; bool PortOpen(string ip, int port, int timeoutMs 1000) { using (var client new TcpClient()) { var task client.ConnectAsync(IPAddress.Parse(ip), port); return task.Wait(timeoutMs) client.Connected; } }第二Connect_Com的串口號不是固定的驅(qū)動裝好后要在設(shè)備管理器里查看實(shí)際分配的 COM 號換了 USB 口可能就變了。第三連接失敗后不要立刻重試有些設(shè)備固件對連續(xù)連接有最小間隔要求頻繁重連會導(dǎo)致設(shè)備暫時(shí)拒絕連接。連接驗(yàn)證通過后記得用一個(gè)全局對象保存當(dāng)前的 CZKEM 實(shí)例后續(xù)讀取、清理、斷開都復(fù)用同一個(gè)實(shí)例避免反復(fù)創(chuàng)建連接。3.2 讀取考勤記錄從設(shè)備到本地緩沖區(qū)的完整流程連接成功之后讀記錄的標(biāo)準(zhǔn)流程是先發(fā)指令把設(shè)備端數(shù)據(jù)拉到本地緩沖區(qū)再用循環(huán)逐條取字段。我手上這套 SDK 里對應(yīng)的接口是SSR_GetGeneralAttendanceData和SSR_GetGeneralAttLogs如果你的版本不同函數(shù)名可能是GetGeneralAttendanceData或ReadAllGLogData以你拿到的頭文件為準(zhǔn)。if (!zk.EnableDevice(1, true)) return; zk.SSR_GetGeneralAttendanceData(1); // 發(fā)指令準(zhǔn)備數(shù)據(jù) string enrollNo ; int verifyMode 0, inOutMode 0; int year 0, month 0, day 0, hour 0, minute 0, second 0; while (zk.SSR_GetGeneralAttLogs(1, out enrollNo, out verifyMode, out inOutMode, out year, out month, out day, out hour, out minute, out second)) { Console.WriteLine(${enrollNo} {year}-{month:00}-{day:00} {hour:00}:{minute:00}:{second:00}); } // 確認(rèn)數(shù)據(jù)已成功保存到業(yè)務(wù)庫之后再執(zhí)行清理 zk.ClearGLog(1);參數(shù)說明第一個(gè)參數(shù)是機(jī)器號Machine Number。單設(shè)備時(shí)寫 1多設(shè)備時(shí)每個(gè)設(shè)備要有不同的機(jī)器號否則數(shù)據(jù)會串SSR_GetGeneralAttLogs的 out 參數(shù)順序在不同 SDK 版本里偶爾有對調(diào)尤其是 VerifyMode 和 InOutMode跑通后先拿真實(shí)數(shù)據(jù)核對一遍再寫死在固定位置ClearGLog是所有動作里最危險(xiǎn)的一個(gè)必須放在數(shù)據(jù)成功保存之后否則代碼中途崩潰設(shè)備端的記錄也沒了只能等員工重新打卡。如果你需要按時(shí)間段查詢不要自己想當(dāng)然地只拉某一天的數(shù)據(jù)再在本地過濾。先看 SDK 文檔里有沒有按時(shí)間段取日志的接口。有的話它會少傳很多流量而且避免把設(shè)備端緩沖區(qū)全部清空沒有的話再全量拉取、本地過濾。如果SSR_GetGeneralAttendanceData返回 false先看設(shè)備端是否在忙碌狀態(tài)有些設(shè)備在傳送指紋模板時(shí)會暫時(shí)拒絕數(shù)據(jù)請求。我的習(xí)慣是失敗后等待 500ms 再重試連續(xù)重試三次仍不成功就把錯誤碼記下來過五分鐘再補(bǔ)拉一次。不要在同一線程里死循環(huán)調(diào)用設(shè)備端會認(rèn)為鏈路異常。3.3 人員信息寫入工號、姓名和權(quán)限的正確姿勢同步人員信息是考勤對接里繞不開的部分。官方示例通常提供一個(gè)SetUserInfo或類似接口參數(shù)大致是機(jī)器號、工號、姓名、密碼、權(quán)限等級bool bOk zk.SetUserInfo(1, 1001, 張三, , 0); if (bOk) { Console.WriteLine(人員寫入成功工號1001); }這段代碼有三個(gè)注意點(diǎn)。第一不同型號設(shè)備對姓名字段長度有限制一般不超過 16 字節(jié)按 GBK 計(jì)超長姓名要先做截?cái)嗟诙?quán)限等級不能隨便寫。0 通常是普通用戶部分設(shè)備里管理員權(quán)限需要 14寫錯了可能在設(shè)備上直接變成管理員存在安全隱患第三寫入成功只代表設(shè)備接受了數(shù)據(jù)不代表指紋/密碼已經(jīng)綁定指紋模板或卡片關(guān)聯(lián)要看 SDK 里專門的上傳接口。如果你用的是 ID 卡或 IC 卡考勤機(jī)還需要調(diào)用發(fā)卡接口把卡號寫到設(shè)備里。卡號通常以字符串形式傳入注意大小端和位數(shù)IC 卡卡號前八位是十進(jìn)制讀卡時(shí)不要自己多轉(zhuǎn)一次。3.4 多設(shè)備場景機(jī)器號規(guī)劃與資源釋放一個(gè)中大型項(xiàng)目通常不止一臺考勤機(jī)。我習(xí)慣用配置表管理設(shè)備把 IP、端口、機(jī)器號、樓層位置做成一個(gè)字典而不是在代碼里寫死private CZKEMClass ConnectToDevice(string ip, int port, int machineId) { var zk new CZKEMClass(); if (!zk.Connect_Net(ip, port)) return null; zk.EnableDevice(machineId, true); return zk; }每個(gè)設(shè)備實(shí)例用獨(dú)立的CZKEMClass不要共用一個(gè)對象。原因很簡單COM 組件的內(nèi)部緩沖區(qū)是設(shè)備相關(guān)的共用一個(gè)實(shí)例時(shí)設(shè)備 A 的數(shù)據(jù)可能沒讀完就被設(shè)備 B 的讀取請求沖掉。用完設(shè)備后調(diào)用Disconnect()長時(shí)間不釋放的實(shí)例會占用內(nèi)存這在 24 小時(shí)跑輪詢的服務(wù)里非常明顯。多設(shè)備輪詢時(shí)最好把連接和讀取做成隊(duì)列任務(wù)一個(gè)設(shè)備讀完了再讀下一個(gè)避免設(shè)備端連接數(shù)過大。設(shè)備端并發(fā)能力弱超過兩三個(gè)并發(fā)連接就會拒絕新連接反而拖慢整體同步速度。4. 繞過 SDK 限制直接定義結(jié)構(gòu)體與動態(tài)庫調(diào)用4.1 什么時(shí)候必須繞過 COM 組件COM 組件是個(gè)黑匣子好用但有限制。最常見的情況是設(shè)備固件更新后新增了接口而 SDK 里的 COM 組件沒跟上或者官方例子覆蓋不到某些行業(yè)定制功能需要直接調(diào)用動態(tài)庫里的私有導(dǎo)出函數(shù)。這時(shí)候再依賴 COM 組件就費(fèi)勁了P/Invoke 是更直接的路。還有一種情況是性能。COM 組件為了通用做了多層封裝單次調(diào)用開銷不小。如果你要從幾十臺設(shè)備里拉記錄直接調(diào)用動態(tài)庫能明顯減少 GC 壓力和調(diào)用延遲尤其是頻繁讀取的場景。但反過來也要提醒如果包里只有 COM 組件和頭文件沒有對應(yīng)的原生動態(tài)庫就別硬繞過。沒有頭文件的時(shí)候自己去猜函數(shù)簽名很容易造成內(nèi)存訪問異常。先把動態(tài)庫、頭文件、文檔三項(xiàng)湊齊再動手。4.2 用 DllImport 聲明入口函數(shù)和參數(shù)動態(tài)庫導(dǎo)出的函數(shù)通常是標(biāo)準(zhǔn) C 接口用DllImport聲明時(shí)要特別注意兩個(gè)點(diǎn)調(diào)用約定和字符集。聲明示例using System.Runtime.InteropServices; [DllImport(plread.dll, CallingConvention CallingConvention.StdCall, CharSet CharSet.Ansi, SetLastError true)] private static extern bool ConnectToDevice(string ip, int port); [DllImport(plread.dll, CallingConvention CallingConvention.StdCall, CharSet CharSet.Ansi)] private static extern int GetDeviceStatus(int machineId, out int status);調(diào)用約定通常按頭文件里聲明的來大部分是 StdCall少部分是 Cdecl寫錯了會導(dǎo)致參數(shù)錯位或棧不平衡。CharSet.Ansi幾乎必須寫因?yàn)樵O(shè)備內(nèi)部用 ANSI/GBK默認(rèn)的 Unicode 會導(dǎo)致字符串參數(shù)變成亂碼。SetLastError true能讓你在調(diào)用失敗后用Marshal.GetLastWin32Error()拿到底層錯誤碼排錯時(shí)很有用。如果你不確定動態(tài)庫導(dǎo)出了哪些函數(shù)可以用開發(fā)環(huán)境自帶的 dumpbin 工具跑一句dumpbin /exports plread.dll把導(dǎo)出函數(shù)名和序號列出來再和頭文件對照。注意函數(shù)名帶不帶下劃線、是否是加棧大小結(jié)尾這些都影響DllImport的 EntryPoint 寫法。4.3 自定義結(jié)構(gòu)體讀設(shè)備日志需要讀取復(fù)雜日志時(shí)可以在 C# 側(cè)定義一個(gè)與設(shè)備端數(shù)據(jù)結(jié)構(gòu)內(nèi)存布局一致的結(jié)構(gòu)體用Marshal.PtrToStructure解析。示例[StructLayout(LayoutKind.Sequential, CharSet CharSet.Ansi)] public struct AttLog { [MarshalAs(UnmanagedType.ByValTStr, SizeConst 24)] public string EnrollNumber; public int VerifyMode; public int InOutMode; public int Year; public int Month; public int Day; public int Hour; public int Minute; public int Second; }關(guān)鍵點(diǎn)是LayoutKind.Sequential它告訴 CLR 按順序排列字段SizeConst 24要跟設(shè)備端字符串緩沖區(qū)一致短了會截?cái)嚅L了會把后續(xù)字段擠偏。讀取時(shí)一般先用某個(gè)導(dǎo)出函數(shù)拿到緩沖區(qū)指針和長度再循環(huán)解析IntPtr buffer IntPtr.Zero; int bufferLen 0; if (GetRawLogData(1, out buffer, out bufferLen)) { for (int i 0; i * Marshal.SizeOfAttLog() bufferLen; i) { AttLog log Marshal.PtrToStructureAttLog( buffer i * Marshal.SizeOfAttLog()); Console.WriteLine(${log.EnrollNumber} {log.Year}-{log.Month}-{log.Day}); } }這里最容易翻車的是結(jié)構(gòu)體大小估算。建議先用Marshal.SizeOfAttLog()打出來跟頭文件里sizeof(AttLog)核對一下不一致就調(diào)整字段類型或加Pack 1。正常情況下字符串長度、int 字段數(shù)量和順序改對就對齊了。還有一種特殊情況是設(shè)備端結(jié)構(gòu)體里存在 bit 字段或聯(lián)合體C# 結(jié)構(gòu)體表達(dá)不了只能用字節(jié)數(shù)組接收再手工解析。4.4 P/Invoke 排錯返回碼、LastError 與抓包直接調(diào)動態(tài)庫時(shí)最頭疼的是失敗后沒有直觀提示。我的排錯順序是先檢查函數(shù)返回值同步看看GetLastWin32Error如果返回值和 Win32 錯誤都沒線索就抓包看網(wǎng)絡(luò)層。中控考勤機(jī)走 TCP 4370 端口用 Wireshark 過濾tcp.port4370能看到通信是否正常。設(shè)備應(yīng)答了但數(shù)據(jù)內(nèi)容不對往往能在協(xié)議層看出端倪。常見 SDK 返回碼含義如下表具體以你手上文檔為準(zhǔn)版本不同碼值可能不一樣常見返回碼含義應(yīng)對方式0調(diào)用成功直接繼續(xù)后續(xù)操作非 0上一次調(diào)用失敗看錯誤碼表定位具體原因設(shè)備端忙設(shè)備正在處理其他指令延時(shí) 500ms 后重試通信超時(shí)設(shè)備無應(yīng)答檢查網(wǎng)絡(luò)和連接狀態(tài)還有一種玄學(xué)情況同一個(gè)導(dǎo)出函數(shù)32 位進(jìn)程里正常64 位進(jìn)程里崩潰。先確認(rèn)動態(tài)庫是不是 32 位如果是項(xiàng)目平臺目標(biāo)必須設(shè)為 x86別以為 Any CPU 能通吃。4.5 提醒不要自行造通信協(xié)議看到這里你可能會想既然能抓包干脆自己模擬協(xié)議徹底擺脫 SDK。我不建議這么做。設(shè)備協(xié)議里的加密校驗(yàn)、指紋模板壓縮格式、日期時(shí)間編碼等細(xì)節(jié)不拿到官方協(xié)議說明基本試不出來。就算短期能讀寫固件一升級就失效。自己造協(xié)議的風(fēng)險(xiǎn)高、成本大遠(yuǎn)不如在 SDK 基礎(chǔ)上做增量開發(fā)劃算。這個(gè)包的價(jià)值就在于官方把協(xié)議層做好了我們只需要在接口層做正確封裝。5. 常見問題排查連接失敗、數(shù)據(jù)亂碼、重復(fù)打卡排查這一章說的基本都是我接項(xiàng)目時(shí)真實(shí)踩過的坑按“現(xiàn)象 → 原因 → 解決”的順序?qū)懣梢灾苯訉φ詹椤?.1Connect_Net返回 false 或一直不返回現(xiàn)象調(diào)用Connect_Net后等十秒左右返回 false再調(diào)EnableDevice也是 false。原因設(shè)備 IP 不通、端口被防火墻擋、設(shè)備未開機(jī)或者設(shè)備網(wǎng)絡(luò)接口本來就是關(guān)閉的。解決先在命令行ping 設(shè)備IP再telnet 設(shè)備IP 4370看端口通不通。如果 ping 通但 telnet 不通檢查防火墻和交換機(jī)端口配置如果 telnet 通但 SDK 連不上多半是 SDK 版本與設(shè)備固件不匹配換動態(tài)庫或 COM 組件版本。代碼里可以做一個(gè)前置探測把網(wǎng)絡(luò)問題和 SDK 問題分開bool reachable PortOpen(192.168.1.201, 4370, 2000); if (!reachable) { // 先處理網(wǎng)絡(luò)層不用調(diào) SDK return; } bool ok zk.Connect_Net(192.168.1.201, 4370);這樣排查界面會清晰很多。實(shí)際項(xiàng)目里很多“連不上”其實(shí)是設(shè)備 IP 換了或者網(wǎng)線松了而不是 SDK 的問題。5.2 x64 下 COM 組件加載失敗0x80040154現(xiàn)象new CZKEMClass()時(shí)拋“檢索 COM 類工廠中 CLSID 為 xxx 的組件失敗”HRESULT 0x80040154。原因COM 組件是 32 位版本而當(dāng)前進(jìn)程是 64 位注冊表里的 CLSID 根本不會被加載。解決把 C# 工程的“平臺目標(biāo)”改成 x86并且去掉“首選 32 位”選項(xiàng)然后用管理員權(quán)限重新注冊 COM 組件。如果運(yùn)行環(huán)境是純 64 位系統(tǒng)且組件無法注冊改用第 4 章的 P/Invoke 方式直接調(diào)動態(tài)庫別在 COM 這條路上死磕。這個(gè)錯誤在開發(fā)機(jī)上跑得好好的、換到服務(wù)器上就炸的場景特別常見因?yàn)殚_發(fā)機(jī)可能裝的是 32 位 Office 或 32 位運(yùn)行時(shí)碰巧能加載。5.3 讀出的中文姓名亂碼或工號帶問號現(xiàn)象姓名讀出后用控制臺打印是???工號出現(xiàn)?或后半截丟失。原因設(shè)備內(nèi)部編碼是 GBK/GB2312C# 字符串默認(rèn)按 Unicode 解析。COM 組件版本新一點(diǎn)的會做轉(zhuǎn)換老版本基本不管。解決P/Invoke 聲明的CharSet必須設(shè)為Ansi對讀出的字符串再按Encoding.Default轉(zhuǎn)成 UTF-8 入庫。寫姓名時(shí)也一樣先按 GBK 編碼再送入設(shè)備。如果你用的是 COM 組件但姓名還是亂可以考慮在程序里強(qiáng)制轉(zhuǎn)一次碼byte[] gbkBytes Encoding.Default.GetBytes(name); string fixedName Encoding.UTF8.GetString(gbkBytes);這個(gè)轉(zhuǎn)換只做一次不要在多個(gè)位置重復(fù)調(diào)用否則會二次轉(zhuǎn)壞。5.4 每天都重復(fù)讀到同一條記錄新打卡數(shù)據(jù)不出來現(xiàn)象定時(shí)同步任務(wù)每天讀出來的還是第一次那幾條員工打了卡卻看不到。原因讀完記錄后沒清設(shè)備端日志或者清的時(shí)候機(jī)器號寫錯了緩沖區(qū)一直處于滿狀態(tài)。解決先確認(rèn)數(shù)據(jù)已經(jīng)寫進(jìn)業(yè)務(wù)庫再調(diào)用ClearGLog(1)或?qū)?yīng)清除接口。清除失敗時(shí)查看返回值不要忽略。如果生產(chǎn)環(huán)境不允許清設(shè)備日志就改成增量同步記錄每次讀到的最大日志序號下次只取序號更大的數(shù)據(jù)。int lastLogId GetLastSyncId(device_001); // 讀取時(shí)只處理 logId lastLogId 的記錄 // 同步完成后更新 lastLogId SetLastSyncId(device_001, maxLogId);增量同步的優(yōu)點(diǎn)是設(shè)備端日志可以保留缺點(diǎn)是設(shè)備本身的日志序號機(jī)制要搞清楚。有些設(shè)備的記錄序號會循環(huán)回繞遇到這種情況還要加一層時(shí)間判斷兜底。5.5 打卡時(shí)間比設(shè)備面板時(shí)間早 8 小時(shí)現(xiàn)象設(shè)備屏幕上顯示 14:00程序讀出來是 06:00。原因設(shè)備內(nèi)部存的是 UTC 時(shí)間讀取動作沒有做本地化轉(zhuǎn)換或者設(shè)備本身的時(shí)區(qū)設(shè)置不對。解決在設(shè)備端設(shè)置時(shí)區(qū)為 UTC8代碼端只在一個(gè)地方做轉(zhuǎn)換不要讀出來轉(zhuǎn)一次、入庫前又轉(zhuǎn)一次雙重偏移比不轉(zhuǎn)更難受。最好把時(shí)區(qū)偏移量寫成配置項(xiàng)方便不同地域的項(xiàng)目復(fù)用。DateTime localTime new DateTime(year, month, day, hour, minute, second); localTime localTime.AddHours(8); // 統(tǒng)一在這里加時(shí)區(qū)偏移如果設(shè)備端時(shí)間不準(zhǔn)還需要在初始化時(shí)用 SDK 的校時(shí)接口同步一次設(shè)備時(shí)間避免時(shí)間漂移影響統(tǒng)計(jì)。5.6 多線程輪詢時(shí) COM 對象被跨線程調(diào)用現(xiàn)象程序運(yùn)行一段時(shí)間后偶發(fā)InvalidCastException或直接無響應(yīng)日志顯示某個(gè)設(shè)備讀取超時(shí)。原因C# 后臺輪詢線程里直接操作同一個(gè) CZKEM 實(shí)例而 COM 對象又是單線程單元STA模型跨線程調(diào)用導(dǎo)致消息泵阻塞。解決每個(gè)線程各自創(chuàng)建自己的 CZKEM 實(shí)例不要共享或者把對同一臺設(shè)備的操作全部切到同一個(gè)獨(dú)立線程里處理。更省心的做法是封裝一個(gè)設(shè)備訪問服務(wù)內(nèi)部用鎖串行化所有設(shè)備指令保證同一時(shí)刻只有一個(gè)線程在調(diào)用 COM 方法。這個(gè)坑在單設(shè)備項(xiàng)目里不明顯一旦上了多設(shè)備輪詢幾乎必現(xiàn)。6. 驗(yàn)證方法先在備用設(shè)備上做一輪“讀-寫-清”冒煙正式接生產(chǎn)考勤機(jī)之前我習(xí)慣用一臺可擦寫的備用設(shè)備做冒煙驗(yàn)證。方法不復(fù)雜先造 3 個(gè)測試工號打幾條測試記錄然后完整跑一遍讀、寫、清流程。通過標(biāo)準(zhǔn)是連接耗時(shí)低于 3 秒能按工號找到對應(yīng)的 3 條記錄清數(shù)據(jù)后再次讀取返回空集合斷網(wǎng)重連后設(shè)備側(cè)記錄不丟。冒煙代碼可以用 xUnit 寫也可以用控制臺[Fact] public void SmokeTest_ReadWriteClear() { var zk new CZKEMClass(); Assert.True(zk.Connect_Net(_testIp, _testPort)); zk.EnableDevice(1, true); zk.SetUserInfo(1, 9999, 冒煙用戶, , 0); zk.SSR_GetGeneralAttendanceData(1); Assert.True(zk.SSR_GetGeneralAttLogs(1, out _, out _, out _, out _, out _, out _, out _, out _, out _)); zk.ClearGLog(1); zk.Disconnect(); }SSR_GetGeneralAttLogs后面的 9 個(gè) out 參數(shù)一個(gè)都不能少少一個(gè)函數(shù)簽名匹配不上編譯能過但運(yùn)行時(shí)行為不對。我一般會先打印讀取到的總條數(shù)確認(rèn)不是“碰巧讀了一條”再說。還要驗(yàn)證清數(shù)據(jù)后立即再讀一次如果還能讀出數(shù)據(jù)說明清除接口沒真正執(zhí)行成功。這套冒煙測完設(shè)備端的連接、人員寫入、日志讀取、清緩存四條鏈路就都驗(yàn)證過了。其他邊界項(xiàng)比如時(shí)區(qū)偏移、中文姓名、多設(shè)備并發(fā)可以在冒煙基礎(chǔ)上各加一條斷言總共半小時(shí)左右就能把 80% 的坑提前踩完。從那以后我每次接考勤機(jī)項(xiàng)目都會強(qiáng)制自己先跑一遍官方示例再到備用設(shè)備上冒煙一遍整個(gè)過程不超過半小時(shí)卻能把通信方式選型、COM 位數(shù)、時(shí)區(qū)偏移、編碼問題一次驗(yàn)證完。希望這個(gè)流程和筆記里的參數(shù)能幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美1区二区三区公司| 劲爆欧美人妖三区91| 久 久无码人妻AV| 91天美传媒在线观看| 欧美激情综合| 亚洲四虎熟女精品| 岛国视频免费在线观看| 激情综合网激情综合| 欧美久久人妻少妇一区二区| 东北夫妻性偷拍| 爱我干综合| 三级激情网站| 欧美的性爱网站免费| 五月天伊人网| 91色人妻| 日韩成人在线性爱视频| 网站A V在线| 日韩无码服务区| 亚洲色图欧美另类在线| 久久鲁夜| 亚洲欧洲无码97久久精品| 日本三级久| 亚洲古典另类欧美在线| 97精品久久久久久久| 欧亚性爱视频免费看| 欧美精品一区二区少妇免费A片| 狠狠操使劲操| 手机午夜电影神马久久| 欧美人人操人人插| 极品欧美一区二区三区| 色网在线视频观看免费| 色狠狠综合| 久久久久国产精品片区无码直播| 亚洲欧综合另类无码一区| 亚洲国产成人精品久久久国产成人一区二区三.| 另类图片欧美激情综合| 秋霞免费无码视频日韩A片| 国产精品懂色tv影视免费观看| 国产9区| www欧美91| 91欧美网| 久久这里只精品免费福利| 欧美亚洲自拍另类人妻| 亚洲啪啪视频免费| 色爱三区| 激情综合色| 伊人婷婷五月天| 国产999精品久久久久久| 九九热男人天堂| 久久久久9久久久久| AV天天在线观看| 亚洲AV资源| 啊啊啊啊啊啊啊啊啊啊在线观看| 久久久精品久久| 人人操人人精品影片| 国产精品9999| 久久久精品电影| 国产一区自拍欧美日韩| 国产激情av女片自拍| 婷婷久久网| 超碰久久性爱| 精品小视频在线| 春色综合免费| 蜜桃中文字日产乱幕4区| 曰本91情色| 欧美色爱综合| 涩综合导航| 亚洲色综合| 97精品一二区| 色哟哟av| 亚洲熟女乱色一区二区三区| 日韩不卡毛片Av免费高清| 色婷婷丁香五月| 丝袜喷水在线| 9久9久| 在线亚洲欧美| 精品国产一级久久| 91av天美性媒精品视频| 久热这里只有精品9| 久久这里只精品免费福利| 日韩人妻 中文字幕| 中文字幕在线观看第二页| 色www精品视频在线观看| 神马久久久久久久久| 国产精品爆乳懂色蜜乳| 色色婷婷五月天| 91夜色chaopeng| 日韩欧美三级| 中文字幕日韩综合| 97伊人超碰| 91人精品妻入口| 99久久婷婷| 中文字幕人乱码中文字的预防方法 | 9久久久久| 被男人吃奶很爽的毛片| 国产视频三区四区| 极品美女嘿咻| 欧美亚洲另类在线蜜桃| 精品十三区| 久久99国产精品| 蜜乳AV色欲AVAV无码| 男女91| 97超碰欧美精品| 黄片在线免费在线观看| 熟妇高潮精品一区二区三区下载| 一区操逼| 人妻爽爽啪视频| 午夜αv| 久久精品国产精品亚洲艾通辽熟妇 | 99啪啪| 日韩欧美日韩| 成年女人一区| 国产一国产一级毛片古装| 综合五月婷婷| 亚洲欧美999| 婬女免费一二三区A片| 蜜臀va69| 国色天香av| 91欧美经典| 国产激情久久| 久久9久| 欧美激情在线观看视频| 久热超碰| 天天色天天干天天爱| 色 婷97| 亚洲无无码αⅴ每日更新| 精品久久久中文字幕不| 久久久久久久九九九九九九| 东北老女人的激情视频| 中国一级操逼视频| 极品一区二区三区免费| 91女网站| 亚州操逼图| 精品综合久久久久久97| 婷婷伊人綜合中文字幕| 色在线视频导航| 嗯嗯啊啊用力视频免费| 超碰国产精品无码| 啊嗯嗯啊好大好爽| 美女人妻色网站| 老熟女搡BBBB搡BBBB视频| 日韩国产十八禁| 日韩人妻播放| 9精品久久久久| 亚洲 欧美 中文 日韩超碰| 夜夜草我| 久久色AV线| 四色永久成人网站| 亚洲国产精品有声| 婷婷人妻激情| 精品人妻夜夜草| 岛国激情视频在线观看| 一本大道久| 天天操av懂色| 日韩人妻免费精品| 久久国产成人精品国产成人亚洲 | 中文字幕日产av人| 欧美另类综合久久| 超碰在线一区| 丰满人妻一区| 精品国产污一区二区三区| 亚洲免费成人精品电影| 亚洲男人天堂手机版| 嗯啊不要啊啊在线观看视频| 无码WWW免费视频网站| 国产久久天堂资源| 高清肉丝中文无码| 小草精彩毛片| 激情五月天社区| 91av熟女人妻| 欧美肥臀在线| 亚洲色图 综合| 日本不卡三级网在线播放| 操逼国产免费| 呦呦影院| 国产老女人久久毛| 在线小说视频一区| 丰满精品人妻少妇久久字幕| 欧亚洲精品有视频| 久久精品人体AV| 人妻熟女av国产网站| 中文字幕一区二区三区四区在线视频| 久午视频| 青青草久草| 男人的天堂日韩| 亚洲精品天天影视综合网 | 色色五月婷婷| 夜夜草网站| 色在线69堂| 精品久久99| 丁香激情网| 秋霞一级视频在线观看免费| 久久久久久日韩| 日本一级真人黄色性爱视频| 超碰在线91| 国产午夜福利合集| q2午夜理论片夜色av| 精品九九九九九九九| 加勒比在线视频| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 日韩欧美亚洲自拍偷拍| 色综合91好| 嗯嗯嗯啊啊在线观看| 人妻在线大香蕉| 99热aaa| 免费网站观看www在线观| 四虎影库国产精品免费| 又黄又爽在线观看视频| 天天摸天天插天天日| 国产成人资源| 欧美一二三区四五区| 人人妻人人操人人乐| 久久婷婷五月天| 人妻嗯啊啊在线播放| 老司机香蕉久久久久| 夜夜嗨一区二区三区三州加勒比 | 欧美性生活男人的天堂| 日韩性爱毛片操骚逼| 人妻无一区二区三区| 国产精品无码成人精品| www.伪伪| 性做久久久久久免费观看软件| 久精品无码av一区二免费国产在线观看| 日韩不卡在线一区二区| 91校园春色长篇| 97超碰69| 精品无码一区二区三区| 精品一区二区三区国产| 亚洲精品啪视频| 影音先锋中文字幕日本好一区二区| 欧亚性爱视频免费看| 久久久五月天| 日韩久久艹| 97免费视频在线观看视频| 少好三P| 精品少妇一区二区| av毛片aaaaa免费看| 亚洲αv一区二区三区| 中文字幕亚洲在线一区| 色av中文字幕| 91制服丝袜| 思思久热在线精品66| 不卡av在线中文字幕| 亚洲成a人片在线观看中文!!!| 亚洲欧美一区二区三区一猛片| 校园春色亚洲色图| 久久久久亚洲熟妇熟女| 亚洲女毛多水多21P| 亚洲色五月| 99re95| 精品久久久久成人码免| 91情色| 嫩草一区二区在线观看| 97青青操视频| 欧美色图片色哟哟| 中文字幕一区二区三区高清| 伊人网av| 97超碰欧美手机在线| 一起草三级AV电影在线观看| 日本三级中国三级99人妇网站| 第四色色综合91| 日日嗷| 日本高清视频xxxx| 91老熟女逼| 91美女视频直播| 91精品国产日韩欧美综合| 一区二区 韩日AV| 蜜桃一区二区三区| 天天看天天干| 欧洲无码一区二区| 国产区在线| 日本一级婬片试看三分钟| 九月丁香婷婷| 国产真乱mangent| 欧美淫穴| 碰碰97| 免费视频a级毛片免费视频| 婷婷五月天无码 | 中文字幕在线观看第二页| 日韩电影中文字幕| 五月丁香社区婷婷日韩欧美精品影院| 伊人网青青| 青草视频在线看看看看看看看看看| 69久久久久久久久久久久久| 国产熟女完整版中字 | 日韩欧美大力操| 久操九九九九| 九九碰九九爱97超| 日韩偷拍色图| 国产精品美女视频诱惑| 色综合美国| 久久精品—区二区三区内射| 亚洲色五月| 啪啪自拍九九综合| 无码一区免费在线不卡| 国产激情综合五月久久| 久久久精品九| 久久久国产成人一区二区三区在线| 欧美性爱一区二区三区四区 | 欧美激情激情xxxx欧美专区| 欧日韩不卡视.频| 色欲久久99国产精品久久久久久| 人妻激情偷乱视频一区二区三区 | 国产三级在线现体验区| 啊啊啊啊啊在线视频| 日韩免费簧片| 日本精品免费一区二区三区四区| 操操逼操操逼操操逼逼| 9久久久久久| 色哟哟的毛片| 国模不卡| 91少妇高潮| 无码91| 国产精品一二三区18| 99re69| 综合欧美激情网| 深爱伊人影院| 丰满人妻一区二区三区在线| 欧美探花网| 国产麻豆一区二三区| 91爱做| 艹比视频国产精品| 国产精品网址| 久久久久无码一妻区| 欧美性爱三区二区| 久一区久久蜜桃| 国产精品熟女九九九| 爱av免费| 婷婷婷婷婷婷久久久久| 精品人妻一区春色| 色欧美天天| 婷婷av在线中文字幕| 久久久专区| 亚洲丝袜二区| 亚洲一级性爱视频免费看| 久久久精品九| 囯产精品强| 麻豆天美国美国产AV| 精品少妇人妻av久久免费| 夜夜黄| 夜夜高潮夜夜爽高清视频一 | 国产欧美黑人丰满在线| 五月天伊人| 爱做久久久久久| 国产无码精品成人| 久艹日日日| 国产女人9999| 啊啊啊啊啊操我视频| 综合色99| 亚洲欧美在线观看免费| 一中国女人毛片水真多| 91青青| 性色av一区二区| 一本道综合色图| 另类 日韩 熟女| 高潮毛片无遮挡高清免费| www超碰| 日本成人A片免费看| 伊人骚琪琪亚洲天堂网站| 久久亚码| 久久久精品一区二区| 欧美性后入| 九九无码| 91啪啪视频| 国产女人操逼视频| 国产强奸超碰AV| 中国一级特黄大片护士| 日韩免费簧片| 亚洲精品尤物yw在线影院| 国产精品ww久久| 天堂综合网| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 欧美性爱五月天| 色色福利| 韩国三级理论在线| 一区二区三区精品视频| 国产又色又爽又舒服的三级视频| 婷婷午夜成人色中色| 国产高清精品一区二区三区毛片 | 激情五月天婷婷| 日韩欧美国产高清视频| 亚洲一本大道中文字幕无码在线| 青青伊人这里只有精品| aaaa少妇高潮大片| 26uuu国产免费观看| 久久一区二区三区入口| 婷婷AV一区二区三区| 欧美午夜视频精品久久| 爱av免费| 啊啊啊啊免费视频| 久久线上视频免费看| 亚洲精品蜜桃久久久| 久久精品国产97欧美精品亚洲| 自拍亚洲综合| 国产精品久久久亚洲第一牛牛_在线观看| 中文字幕午夜精品久久久| 超碰久草| 九九碰九九爱97超| 99久久精品无码一区二区毛片免费| 性爱视频免费网址| 亚洲高清国产理伦片| 97人人操人人摸人人爱| av资源在线观看少妇| 日本高清久久| 男人天堂日日夜夜| 后入人妻无码| 91肉片| 国产av强奸美女| 午夜福利精品| 色色婷婷五月| 97精品视频免费| 97av,com| 男女国产精品| 可能人人看人人摸| 婷婷色导航| 青苹果影院男人的天堂| 啊啊啊啊好疼| 久久久久久人妻一区精品色欧美| 日韩免费性爱视频在线观看| AV天堂男人的天堂| 99草精| 一区二区三区免费视频入口| 国产精品自在线发布| 五月天啪啪| 精品国产99| 中文字幕亚洲在线一区| 啊啊啊啊啊操我视频| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 伊人女女资源在线观看| 久久久久久性爱视频| 长久操视频| 亚洲欧美电影| 黄色av一区二区在线| 国产夜夜艹| 天天综合~91| 伊人久久在线视频观看| 热久久精品| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 超碰社区97| 精品久久久av无码免费| 九九色热| 无卡一区=区| 亚洲高清无毛一区二区| 丁香六月婷婷综合| 亚洲国产中文字幕| 欧美一级AAAAAAA| 97色色色| 韩日欧亚a级| 国产极品美女高潮无套在线观看| 67914在线精品观看| 老熟女综合网| 国产一区二区啪啪视频| 加勒比伊人综合| 亚洲色图欧美激情| 激情自拍 校园春色| 国产不卡的视频 | 欧美少妇高潮久久91| 97在线观看| 开心五月天激情网| 精品无码久久| 91丨九色丨熟女高潮| 蜜臀99久久精品| 亚洲强奸乱伦影视网| 在线岛| 成年男人的天堂| 超碰2017| 天天射网| 91精品人妻偷情| 精品久久在线区一区| 久久久96| 一区二区精品更新提醒| 日韩性爱免费观看视频| 久操 高清| 麻豆国产视频精品观看| 日韩久草| 免费毛片在线播放| 久夜操| 91国产精品在线看| 立川理惠被中出无码| 日韩紧密久久| 国产专区第一页| 60秒免费视频| 青娱乐日韩无码| 综合亚洲网| 男人的天堂不卡一区二区| 青草一区二区| 91欧美长吊| 中国一级操逼视频| 天堂网亚洲区手机版| 婷婷色综合| 白丝AV| 97久久久精品| 日本99久久| 97视频在线播放| 久久亚州高清| 91人妻Pr| 1769成人国产精品视频| 韩日巨乳美女免费视频在线观看| 亚洲操逼视频网站| 懂色Av| 国产美女激情| 五月婷婷综合网| 亚洲色婷婷久久91| 亚洲极品| 国产13区| 激情综合久久| 日韩激情无码影院| 精品制服美女中文一区二区三区| 青青草自拍视频在线播放| 国产精品无码久久久久2025| 91天天综合在线| 97 色综合| 新97国产超碰| 欧美三级一级| 日本福利二区视频| 亚洲天天做日日做天天谢日日| 锕锕好爽 死我在线观看| 亚州国产精品乱| 色婷婷激一区二区三区| 天天综合-91入口| 天美传媒av在线| 91丝袜在线观看视频在线观看| 免费在线黄片视频| 四虎午夜影院| 少妇熟女一区二区三区| 69丨亚洲丨精品丨入口免费播放| 91九色丨国产丨爆乳| 久久五月视频| www国产天美久久久| 亚洲无码com| 97超级久久| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 操熟女91| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 自怕偷自怕亚洲精品| 啊啊啊免费| 久草电影网| 欧美熟妇亚洲版| 青苹果影院男人的天堂| 又黑又大又粗| www.狠狠操| 色五月综合网| 综合色色婷婷| 国产 日韩 另类 视频一区爱| 亚洲天天做日日做天天谢日日 | 96精品在线| 免费黄色视频网址| 激情五月综合| 亚洲另类电影| 亚洲一区日韩| 久久草大香蕉| 激情五月综合网| 欧美精品999| 91亚洲狠狠色| 尤物AV免费网站| 91碰碰| 国产久久男人天堂| 国产成人精品一区| 9.1小视频| 久9爱精品| 色爱天堂| 69精品| 色吧91| www国产无码| 视频国产欧美在线播放| 日韩强奸av| 一本色道久久天天射天天干| 密乳无码| 免費黃色視頻觀看一| 婷婷视频网| 日韩AV一区二区三区四四| 久久久久骚| AV老汉| 蜜桃久久久久久久久久久久| 综合一区二区影视| 日韩欧美麻豆 | 黄色大片免费在线| 无码免费精品高清| www.五月天| 欧美天堂日韩三级国产传媒| 91nbbbbbb| 综合熟妇一区二区三区| 欧美牲| 亚洲无无码αⅴ每日更新| 一牛影视成人片免费| 麻豆啪啪啪视频| 日本超碰在线国产一区| 青青青青草av在线观看| 欧美日韩亚洲国产中文永久天天看| 蜜桃香蕉久草精品在线| A 天堂| 曰本人妻人人澡人人夹| 一二三区在线| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 亚洲综合一| 亚洲男人天堂网站| 亚洲乱色熟女一区| 亚欧国产无码精品在线| 青青青国产| 天天天操天天天爱| 思思热一热婷婷热一热| 欧洲综合视频| 伊人午夜福利视频| 日韩欧美福利视频看看| 综合色色婷婷| 欧美日动态视频| 好爽视频在线观看视频 | 91日产欧美| 少妇蹲下露出大唇5| 操迟操逼在巾线Fre看| 欧苏综合色综合| 免费亚洲国产精品久久一区| 国产 日韩,欧美 自拍| 强奸乱伦αv片| 综合久欧洲| julia国产在线| 婷婷午夜成人色中色| 精精夜夜| 欧美天天搞| 日韩少妇一区二区三区| 伊人国产视频| 四虎国产精品永久在线囯在线| 国产精品久久久久综合| 伊人久久亚洲中文字幕不卡| 26uuu最新| 亚洲va综合va国产va中文| 91青青在线视频| 亚洲av综合色区图片亚洲| 久久天天性久久伊人| 后入人妻无码| 91|九色|国产熟女| 综合性视频99| 一级aaaaa欧美中文字幕录像片| 在线 亚洲 网爆 自拍| 97在线视频网站| 国产无码一二三区| 日韩不卡在线一区二区| 青青草伊人久久| 最新亚洲黄色免费电影| 九九九网页| 97超碰欧美| 青青草原狼av| 精品无码欧美三级| 日韩AV中文字幕电影| 国产成人亚洲精品无| 久久久久13| 欧美91在线| WWW4虎| 黄色视频高清无码网站| 日韩美女久久一区二区三区| 色色毛片| 精品亚洲俞拍视频一区| 变态乱伦伪娘灌肠一区二区| 97视频www| 伊人影院综合是一个与深夜成人在线| 精品人妻一区春色| 一区二区三区精品视频| 揉揉揉夜夜| 综合熟女| 亚洲国产精品久久AV| 亚洲中文字幕乱码无码一区二区| 国产精品一区二区a| 欧美三级免费伊人| 亚洲人妻在线一区| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 人妻日日夜夜精品| 涩涩涩综合| 久久9999| 青青草日本无码| 国产亚洲深夜激情| 久久久精| 黄页18禁| 日本性爰一道本| 天天操福利视频综合网站| 激情五月综合网| 东北少妇高潮zzzz| 天天影视网色欲色香| 亚洲色五月| 狠狠色伊人亚洲综合网站色| 欧美91久久久久| 亚洲国产第一页综合视频| 乱伦熟女论坛| 欧美人妻一区二区| 久久久99久9| av网页一区二区三区| 日日躁夜夜躁狠狠躁超爽| 高树玛利亚无码流出| 无码乱人伦中文视频| 91丨九色丨东北熟女| 亚洲国产成人7777| 啊啊啊啊免费视频| 日本 免费 一区二区三区 久久香蕉 | 精品人妻一区二区视频| 无码粉嫩白虎一线天b区| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 久久久久国产精品久久久| 99久热精品99re6热| 开心婷婷五月| 日本不卡高清视频| 久久久久久久人妻丝袜| 少妇特黄一区二区三区| 欧洲乱码一区二区| 99色热| 成人乱码一区二区三少妇| 91天天| 欧美在线亚洲| 色网1| 日韩成人午夜精品久久高潮| 99无码精品| 国产AV无码AV| 一本久道在线综合视频| 婷婷涩嫩草鲁丝久久午夜精品| 超碰97亚洲区| 精品小视频在线| 青娱乐 成人娱乐在线| 日本中文字幕在线电影| 欧美成人A天堂片在线观看| 超碰97色| 国产乱子伦一区二区三区在线观看| 亚州九九九精品视频| 老师充足的奶水小说| av中文字幕在线熟女| 免费毛片在线播放| 国产成人www免费人成看片| 国产av波波国产精品| 欧美综合国产精品久久丁香| 久久夜夜| 欧美综合自拍| 婷婷爽人人婷婷爽视频| 色97干| 蜜臀久久99精品久久久久久酒店| 91一起操| 久久露脸国产老熟女| 亚洲欧美日韩精品久久久一区二区| 国产亚洲欧美每日在线| 一级人妻性爱视频| 少妇厨房愉情理伦片bd在线观看| 天天日天天操天天射河南省| 精品人妻一区二区三区日产| 校园春色五月天| 少妇色| 97免费在线视频| 国产无码成人无码| 国产午夜精品理论片一二三区区| 看全色黄大色大片免费视频| 日韩内| 尹人免费观看视频在线| 国产中文字幕曰本毛片| 国产熟女精品一区二区| 九九精品网| 夜夜国自区| 9久9久9久9久视频网站| 极品一区二区三区免费| 97色欧洲| 三四中文字幕| v91av| 成·人免费午夜在线观看| 东京热男人天堂| 五十路一区无码| 欧美成人免费在线观看| 偷拍偷窥与盗摄视频专区| 国产无码久久高清| 国产精品女生av| 一本一道vs波多野结衣| 久久久国产成人一区二区三区在线 | 色网在线视频观看免费| 欧美性爱三区二区| 麻豆国产免费影片| 91色女| 麻豆精品三区视频| 91精品国产长腿丝袜美女| 台湾佬大香蕉| 美国日韩黄片| 国产麻豆福利av在线播放| 99re久久| 午夜欧美J进J出白浆流出久久久| 97在线观看免费视频l| 毛片99-全集电影手机免费观看完整-B029AV | 91老熟女91老女人| 老妇女91| 中文字幕88av在线| 亚洲日韩狠狠撸视频| 久久久999| 国产欧美岛国精品一区| 懂色AV一区二区三区| 91欧美丨精品丨入口| 国产精品97视频| 色黄污美女啪啪啪免费网站| 日本综合久久| 先锋音影AV| 97在线视频网站| 国内毛片免费h片在线| 91天堂色男人的天堂| 中文字幕第页| 天天躁狠狠躁av| 亚洲一区二区在线观看91| AV污污污污| 亚洲色图加勒比| 日韩欧视频| 狼狼色丁香久久婷婷综合五月| 色爱综合网| 91劲爆| 91伊人久| 97WW精品| 亚洲欧美综合网| 白天啪啪晚上啪啪视频| 国产视频一区二区在线观看| 中文字幕一二三av| 亚洲欧洲综合成人av一区| 小草三级久久观看| 精品无码少妇| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 日韩国产乱子伦App| 亚洲免费精品一区| 成人性交免费视屏| 色色色色网站| 91碰碰| 2019天天干天天操| 日本东京热大香蕉a片| 天天草天天日| 麻豆黄色五月天| 天堂性色| 六月色婷婷| 国产精品一区在线播放| 全免费a敌肛交毛片免费| 91网站视频在线观看| 国内偷拍精品一区二区| 久久久久久久极品香蕉视频| 伊人网高清| 男人的天堂99| 激情五月丁香五月| 九九九九热只有精品| 日本色色的视频| 亚洲九九视频在线观看| 黄色av片三级三级三级免费看| 色网在线| 人人摸人人添人人操 | 日韩国产乱子伦App| 欧美日韩婷婷中文| 五月婷网站| 热热色色综合| 久久一级无码精品毛片6| 国产情色第一第二页在线观看| 伊人久久大香线蕉无码| 日产成人久久| 91站街按摩店老熟女熟女| 新怡红院| 99青草| 日韩av免费一级电影| 色五月第四色| 久久毛卡| 天天射天天色成人| 中文字幕国产精品1区| www.av家庭乱伦| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 97日亚洲欧美| 人妻天天操天天爽视频免费| 久9re热视频这里只有精品| WWW.加勒比人妻一区不卡.com| 岛国网址国产| 91欧美情色| 东北夫妻性偷拍| 国产黄色影片在线观看| 中文子幕一二三| 九九成人| AV一区观看| 伊人网在线点播| 国产精品九9| 久草免费福利在线播放| 欧美第五页| 乱日视频| 福利在线黄片| 看日韩黄片| 久久久神马影院| 天天日老熟妇| 日韩国产乱子伦App| 麻豆av一区二区| 91网站18在线| 天天弄天天操| 日韩欧美大力操| 清纯唯美综合| 国产第二页| 日韩免费人妻色情网站| 约操熟妇| 在线视频97| 欧美色图小说综合 | 一级二级三级黑人无码| 精品国产99999| 欧美情色男人的天堂| 亚洲中文字幕av| 日韩黄片视频试看| 青娱乐啪啪视频| 精品无码产区一区二| 久久国色天香香蕉| 凹凸视频特色日本特黄| 久久久久久电影| 校园春色 欧美| 欧美日日人人天天| 欧美综合在线91| 欧美色偷拍 | 久久久一区二区三区麻豆| 丁香婷婷激情五月天无毒不卡 | 久久人妻四季| 99热自拍| 无遮挡h肉动漫在线观看| 亚洲图片色图欧美另类| 欧美v日韩v亚洲v最新在线| 999色欧美中文字幕| 亚洲男人天堂2013| 美女啪欧美一区| 97国产色综合| 婷婷五月天社区| 丁香婷婷九月| 国模少妇一区二区三区| 亚洲国产精品有声| 国产精品分类在线观看| 国产老女人久久毛| 色淫网站优优视频| 亚州精品人妻一二三区| 中文日韩欧美熟| 日本蜜桃| 日欧毛片久久| 99热精品国产| 97超碰亚洲| 久久久久9999妇女| 男人干美女| 久久一留热品黄| 天天操天天射青青草| 操人妻少妇中文 | 日本精品一区二区三区四区的功能| aV中文麻| 强乱老妇中文字幕| www.91视频网| 欧在线一二区| 特色a在线上| 夜夜爽夜夜操| 亚洲国产精品无石码久久 | 91在线限制级| 欧洲精品在线播放| 亚州综合AⅤ| 久久一二三四五六七八九区区| AV老汉| 欧美大战久久久伊人| 亭亭在线资源| 久草成人影片| 欧美性夜| 欧美国产精品久久九九| 韩国免费播放一级毛片| 人妻偷拍一区二区三区| 亚洲AV无码翔田千里网站| 最好看的中文字幕在线2018| 太久视频| 可以免费观看的av| 欧美日韩m| 看黑丝美女操逼青青网站| 亚洲吊色| 国产2.3.4区| 婷婷午夜清品久久久久久久性色视频观| 欧美宗合色| 91人妻人人澡人人爽人人精品| WWW操逼| 色久桃花影院在线观看| www久久99| 久久综合久久综合人久久夜精品| 九九九九九九成人| 亚洲色天堂九9| 91丝袜在线观看| 亚洲AV无码翔田千里网站| 精品国产一级久久| 久操视频免费在线观看| 搞中出视频在线观看| 超碰综合97在线| 91亚洲网| 欧美日韩 强奸乱伦| 99亚洲精品| 97看操| 欧美激情亚洲| 岛国在线免费视频| 亚洲色综合| 久草色悠悠在线视频| 干b网| 国内精品久久人妻性色av| 日韩av不卡在线观看| 91超碰人人| 超碰在线综合97| 国产内射爽爽大片| 日韩乱伦视频| 久久国产精品,久久国产| 丝袜视频网国产90| 日韩免费福利在线观看| 人人色人人操在线| 中文字幕十五区| 欧美超碰在线| 性爱av在线免费观看| 久久国产精品,久久国产| 97中文字幕一区| 国产日韩欧美中文在线播放| 五月综合久久| 乱色老一区二区三区的观看方式| 亚洲 欧美 日韩 国产一区二区| 亚洲黄网在哪免费看| 久久、1234| 国产60页| 人人操AV| 少妇激情AV| 久久久久久69国产一区二区| 大香蕉碰碰| 伊人97| 日美免费黄片| 日韩ab网| 精品日韩人妻精品一二三区| 大香蕉伊人色偷偷在线| 高清无码学生妹高潮| 午夜福利精品| 中文字幕精品久久久久人妻红杏ⅰ| 91天天看| 神马精品视频| 少妇激情一区二区三区视频| 青娱乐久久艹| 中文字幕av丝袜| 370p日韩欧美亚洲精品| 人人操天天爽| 97在线观看| 久久99黄色卞西瓜| 五十路三区在线| 志村玲子视频一区二区| 欧美另类丝袜熟女| 欧美性爱在线无码| 九九久久国产精品怡红院| 国产h片在线观看视频| 超碰97久久观看| 乱伦图av| 欧美激色| 国语对白在线播放视频| 99爱爱| 精品一区二区人妖| 色天使AV天堂| 精品人妻美妇91job| 青青青草原| www.超碰在线| 99re视频这里只有精品| 69超碰综合| 美女诱惑一区| 射丝袜高跟鞋99| 欧美性爱日韩高清| #NAME?| 日本性爱不卡视频| 九色 蝌蚪 熟女自| 亚洲AV免费在线| 夜夜爽夜夜操| 熟妇亚洲一区二区三区| 100啪啪视频大全| 粉嫩小泬久久久一区二区| 中文字幕91页| 欧美亚洲韩国视频十五区 | 人妻娇喘 激情视频| 密桃99999| 中文?日韩?免费?精品| 天天舔九色婷婷| 欧美顶级黄色大片免费| 97爱爱官网| 综精品久久久aaaa| 眼镜人妻101.com| 东京热99999| 99热久| 天天看夜夜看日日干| 国产精品视频播放| 小情侣高清国产在线视频| 国产精品播放| 欧州激情视频在线一区二区| 亚州AV无码国产精品| 青娱乐91| 97视频www| 婷婷九月| 五十路六十路七十路熟婆| 九九超碰综合网| 美女啊啊啊啊啊啊啊| 久久久久亚洲AV无码专区少妇| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 呦呦影院| 夜夜国自区| 国产有码一区| 亚洲欧洲国产综合av| 精品无码一区二区三区色欲| 搡老熟女国产1000部| 91色碰| 第一高清av中文字幕| 久久超碰国产一区二区三区| 国产热av| 亚洲永久永久永久永久一级一级一级精品 | 一区二区三区激情在线观看| 黄色无码高清黄色无码网站| 龙兴卡官方查询| 91青视频| 日韩中文字幕二区| 久久久久免费看少妇A片特黄| 超碰人妻久久| 人妻大香蕉| 久草婷婷| 超91综合网| 美女黄频a美女大全免费皮| 被窝影院午夜看片无码| 久久黄黄黄| 91N综合网在线| 亚洲精品欧洲精品| 久久久九97| 立川理惠无码一区二区| 日韩欧美午夜一区二区| 97精品免费视频网站| 99精品无码| 香蕉av一区二区三区| 丝袜性亚洲| 天天摸天天插天天日| 欧美在线播放aaaa| 天天色天天干天天射| 91肉片| 亚洲乱妇p22| 日日骚网站| www.成人无码| 婷婷久草| 日本999精品| 偷拍亚洲高清图片| 91亚州日韩高清| 日日干日日| 日日夜夜狠狠| 精品人人插人人操| 色偷偷男人的天堂麻豆| 综合久久9| 少妇精品| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 精品国产72| 日韩欧美丝袜诱惑| 97亚洲资源| 中文字幕人妻色偷偷久久皮| 亚洲中文字幕有码视频一区二区三区| 天天射影院| 久久女人一区二区三区| 激情久久久| 五月婷婷六月丁香| 看日韩美女二区三区免费操逼视频| 韩国一级婬片A片AAAAA| 国内精品伊人久久久久影院会| 亚洲图片欧洲图片aⅴ| 日韩欧美午夜视频在线| 97欧美性爱| 丰满人妻av一区二区三区| 国产综合永久精品日韩鬼片| 国产三级中文有码在线视频| 亚洲国产麻豆一区二区三区| 久久国内| 激情五月丁香五月| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 精品久久久久综合无码| 丰满人妻一区二区三区四区| 日本色日夜干| 欧洲性爱无码区| 日韩成人精品| a v网站在线播放| 九九色图| 熟女丝袜视频|