亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

Qt QUdpSocket UDP通信Demo:局域網(wǎng)廣播組播與設(shè)備發(fā)現(xiàn)實踐

Qt QUdpSocket UDP通信Demo:局域網(wǎng)廣播組播與設(shè)備發(fā)現(xiàn)實踐 簡介面向具備一定 C 基礎(chǔ)、希望掌握 Qt 網(wǎng)絡(luò)編程的開發(fā)者這套 QTUDP 通信示例圍繞 UDP 無連接、低開銷、低延遲的特點演示客戶端與服務(wù)端之間的數(shù)據(jù)報收發(fā)可用于音視頻流、實時控制等場景的入門驗證。壓縮包共 12 個文件約 10KB含 4 個 cpp、2 個 h 源代碼及 2 個 ui 界面文件另有 2 個 pro 工程配置和 2 個 user 用戶配置便于導(dǎo)入 Qt Creator 對照運(yùn)行。資源已有 823 人學(xué)習(xí)讀者可借此理解 QUdpSocket 的端口綁定、數(shù)據(jù)報發(fā)送與接收、readyRead 信號處理及基礎(chǔ)錯誤檢查并梳理輕量 UDP Demo 的工程組織方式為后續(xù)擴(kuò)展多線程收發(fā)、編解碼與穩(wěn)定性處理打基礎(chǔ)。1. 局域網(wǎng)里那點事用 QUdpSocket 其實很短剛上手 Qt 網(wǎng)絡(luò)模塊的人往往是在一個局域網(wǎng)小工具里第一次碰到 QUdpSocket上位機(jī)要同時給十幾臺下位機(jī)推配置用 TCP 得為每臺維護(hù)一條連接、處理斷線重連換成 UDP 之后一次 writeDatagram 就把包扔出去了。這份 QTUDP通信Demo 就是這類需求的骨架它沒把協(xié)議做全而是把 Qt 下 UDP 通信的完整路徑攤開套接字初始化、端口綁定、數(shù)據(jù)報收發(fā)、廣播與組播以及在 readyRead 信號里把裸字節(jié)還原成業(yè)務(wù)消息。適合三類人剛上手 Qt 想找個能直接編譯運(yùn)行的起點、做過 TCP 被粘包和多連接折騰過、需要在局域網(wǎng)做設(shè)備發(fā)現(xiàn)和狀態(tài)上報。它真正回答的不是“怎么寫一個 UDP 程序”而是“UDP 這一層在你的工程里該長什么樣”。2. 工程結(jié)構(gòu)與技術(shù)選型三層拆分讓網(wǎng)絡(luò)代碼能離開界面活著一個能直接編譯的 Demo最容易寫壞的恰恰是結(jié)構(gòu)。所有邏輯塞進(jìn) MainWindow 的槽函數(shù)里二十行能跑通等到要加心跳、加廣播、加文件分片界面類會膨脹到八百行想抽出來復(fù)用的時候發(fā)現(xiàn)到處是 ui- 指針。這個 Demo 的價值一半在收發(fā)本身另一半在它把“界面”“網(wǎng)絡(luò)”“協(xié)議”這三件事拆開了。2.1 目錄拆分界面、協(xié)議、網(wǎng)絡(luò)各管一攤我一般會把這類項目擺成下面這個樣子src 下按職責(zé)分目錄而不是按文件類型分目錄QTUdpDemo/ ├── QTUdpDemo.pro qmake 工程文件 ├── CMakeLists.txt CMake 構(gòu)建Qt6 優(yōu)先 ├── src/ │ ├── main.cpp │ ├── ui/ │ │ ├── mainwindow.h │ │ ├── mainwindow.cpp 只負(fù)責(zé)輸入框、按鈕、日志展示 │ │ └── mainwindow.ui │ ├── net/ │ │ ├── udpreceiver.h 綁定端口、收包、拋信號 │ │ ├── udpreceiver.cpp │ │ ├── udpsender.h 組包、發(fā)送、解析目標(biāo)地址 │ │ └── udpsender.cpp │ ├── proto/ │ │ ├── packet.h 協(xié)議頭結(jié)構(gòu)體與常量 │ │ └── packet.cpp 打包 / 解包 / 校驗 │ └── model/ │ └── peerlist.h 在線對端列表IP、端口、最后活躍時間 └── res/ └── icons.qrcnet 層只認(rèn) QByteArray 和 QHostAddress不 include 任何界面頭文件proto 層只做字節(jié)層面的打包解包純函數(shù)可以單獨(dú)寫單元測試ui 層拿到的是已經(jīng)解析好的消息對象。這條邊界守住之后后面換成命令行程序、換成無界面服務(wù)net 和 proto 一行都不用改。這是我在自己項目里踩出來的規(guī)矩網(wǎng)絡(luò)層只要開始 emit 帶 QString 的“已經(jīng)格式化好的日志”基本就廢了它會被界面需求牽著走。具體到類的職責(zé)UdpReceiver 持有 QUdpSocket、負(fù)責(zé) bind 和 readyRead 槽UdpSender 持有另一個 QUdpSocket負(fù)責(zé) writeDatagram 和發(fā)送失敗的 errorString 上報Packet 提供 encode/decode 兩個靜態(tài)方法返回一個可選的業(yè)務(wù)消息結(jié)構(gòu)。PeerList 用 QHashQString, PeerInfo 存活躍對端key 用 “ip:port”定時器掃過期。這幾個類加起來不到五百行但每一塊都能單獨(dú)拎走。2.2 QUdpSocket 的能力邊界以及 Qt5 與 Qt6 的差異選 QUdpSocket 而不是裸 socket理由很實際它把 Qt 的事件循環(huán)接上了readyRead 信號天然和界面線程同頻不需要自己寫 select 循環(huán)也不需要處理 EINTR。跨平臺方面 Windows 的 Winsock 初始化和 Linux 的 socket 選項差異都被抹平了。代價是它只暴露 UDP 的傳輸層能力不幫你做任何可靠性保證這一點必須提前想清楚。維度QUdpSocketQTcpSocket連接模型無連接每次帶目標(biāo)地址先 connect之后只寫數(shù)據(jù)消息邊界一條數(shù)據(jù)報就是一條消息流式需要自己切包送達(dá)保證不保證到達(dá)、不保證順序保證有序到達(dá)單包上限約 65507 字節(jié)受 MTU 影響更小無上限典型場景設(shè)備發(fā)現(xiàn)、狀態(tài)上報、音視頻幀文件傳輸、命令通道Qt5 和 Qt6 在這塊 API 上的差異不大但有三個點要注意。第一QNetworkDatagram 是 Qt 5.8 才有的如果工程要兼容更老的版本接收側(cè)只能退回 readDatagram(char*, qint64, QHostAddress*, quint16*)。第二錯誤信號在 Qt 5.15 之前叫 error(QAbstractSocket::SocketError)5.15 起改名為 errorOccurredQt6 里只有后者寫 connect 的時候要么按版本做條件編譯要么直接用舊名字去連。第三Qt6 的 CMake 側(cè)需要用 qt_add_executable 和 qt_standard_project_setupqmake 的 .pro 則幾乎原樣能編。提示如果從 Qt5 工程遷到 Qt6先看 QTextCodec 相關(guān)的代碼Qt6 把它挪到了 core5compat 模塊而 UDP 本身的收發(fā)邏輯一般不需要改。2.3 兩份構(gòu)建配置.pro 與 CMakeListsqmake 那份是給習(xí)慣 Qt Creator 直接打開的人準(zhǔn)備的四行就夠QT core gui widgets network CONFIG c17 TARGET QTUdpDemo TEMPLATE app SOURCES src/main.cpp src/ui/mainwindow.cpp src/net/udpreceiver.cpp \ src/net/udpsender.cpp src/proto/packet.cpp HEADERS src/ui/mainwindow.h src/net/udpreceiver.h \ src/net/udpsender.h src/proto/packet.h FORMS src/ui/mainwindow.ui關(guān)鍵就在 QT network 這一行沒有它鏈接階段會報 QUdpSocket 未定義。CMake 那份對應(yīng) Qt6cmake_minimum_required(VERSION 3.16) project(QTUdpDemo LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) # 有 Q_OBJECT 的類必須開 find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Network) qt_standard_project_setup() qt_add_executable(QTUdpDemo src/main.cpp src/ui/mainwindow.cpp src/net/udpreceiver.cpp src/net/udpsender.cpp src/proto/packet.cpp ) target_link_libraries(QTUdpDemo PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Network)參數(shù)上要留意 find_package 里的 Network 組件少寫一個就是編譯期找不到 QUdpSocket 頭文件。CMAKE_AUTOMOC 必須為 ON否則自定義類里繼承 QObject 的 Q_OBJECT 宏不會被處理鏈接時報 vtable 未定義這個錯誤提示對新手極不友好是典型的入門翻車點。Qt5 用戶把 Qt6:: 換成 Qt5::、find_package 里寫 Qt5 即可qt_add_executable 換成普通的 add_executable。3. 核心鏈路拆解從 bind 到 readyRead 的一次完整收發(fā)結(jié)構(gòu)擺好之后真正要讀透的是那一兩百行網(wǎng)絡(luò)代碼。UDP 的收發(fā)在 Qt 里被壓縮成了四五個函數(shù)但每個函數(shù)的參數(shù)都藏著坑尤其 bind 和 receiveDatagram 的參數(shù)含義寫法上差一點行為就差很遠(yuǎn)。3.1 構(gòu)造與綁定地址、端口和 BindMode 三件事接收端必須綁固定端口否則對端不知道往哪發(fā)。構(gòu)造函數(shù)里就該把 bind 和信號連接做完避免對象構(gòu)造成功但實際不可用的半殘狀態(tài)// src/net/udpreceiver.cpp UdpReceiver::UdpReceiver(quint16 port, QObject *parent) : QObject(parent) , m_socket(new QUdpSocket(this)) { // AnyIPv4 表示監(jiān)聽本機(jī)所有 IPv4 網(wǎng)卡用 Any 會同時嘗試 IPv6 const bool ok m_socket-bind(QHostAddress::AnyIPv4, port, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint); if (!ok) { qWarning() bind port failed: m_socket-errorString(); return; // 后續(xù) readyRead 不會觸發(fā)調(diào)用方需檢查 isListening() } connect(m_socket, QUdpSocket::readyRead, this, UdpReceiver::onReadyRead); } bool UdpReceiver::isListening() const { return m_socket-state() QAbstractSocket::BoundState; }參數(shù)逐個說。第一個參數(shù)是監(jiān)聽地址寫 QHostAddress::AnyIPv4 會綁到 0.0.0.0廣播和組播都能收寫成某個具體網(wǎng)卡地址就只有那塊網(wǎng)卡收得到本機(jī) 127.0.0.1 發(fā)來的包會被丟掉——這是“本機(jī)能發(fā)不能收”最常見的原因。第二個參數(shù)是端口0 表示讓系統(tǒng)分配但接收端絕不能用 0。第三個參數(shù)是 BindMode默認(rèn)值 DefaultForPlatform 在 Linux 上對應(yīng)獨(dú)占兩個進(jìn)程先后綁同一端口時第二個直接失敗加上 ShareAddress | ReuseAddressHint 之后同一臺機(jī)器上跑兩個實例調(diào)試才不會互相打架。工程上允許重復(fù)綁定是為了調(diào)試方便正式部署時一個端口只應(yīng)該有一個接收者。3.2 發(fā)送路徑writeDatagram 的返回值能告訴你什么發(fā)送端不一定要 bind因為 sendto 時內(nèi)核會自動分配源端口。但如果對端會回包就必須 bind 一個固定端口否則回包打到隨機(jī)端口上沒人收。發(fā)送邏輯本身很短難的是目標(biāo)地址的解析// src/net/udpsender.cpp qint64 UdpSender::sendText(const QString text, const QHostAddress to, quint16 port) { QByteArray packet Packet::encode(Packet::TypeText, text.toUtf8()); const qint64 written m_socket-writeDatagram(packet, to, port); if (written ! packet.size()) { // UDP 下要么整包寫入要么 -1出現(xiàn)部分寫入說明包超長 qWarning() send failed, want packet.size() got written m_socket-errorString(); } return written; } bool UdpSender::sendTextToHost(const QString text, const QString host, quint16 port) { QHostAddress addr; if (!addr.setAddress(host)) { // 先按 IP 字面量解析 // 域名解析是阻塞的示例里放主線程真實項目應(yīng)換成 lookupHost 異步版 const QHostInfo info QHostInfo::fromName(host); if (info.error() ! QHostInfo::NoError || info.addresses().isEmpty()) { return false; } addr info.addresses().first(); } return sendText(text, addr, port) 0; }writeDatagram 的返回值是實際寫入的字節(jié)數(shù)UDP 語義下它只有兩種結(jié)果等于數(shù)據(jù)報長度或者 -1。如果出現(xiàn)“小于包長”的返回值通常意味著數(shù)據(jù)報超過了協(xié)議棧允許的上限IPv4 下大約 65507 字節(jié)或者是緩沖區(qū)瞬間被打滿。返回值不是 -1 就以為發(fā)成功了是個常見的錯覺——UDP 發(fā)送成功只代表數(shù)據(jù)交給了內(nèi)核不代表對方收得到這一點在后面心跳和重傳設(shè)計里會再提。3.3 接收路徑readyRead 只說明“至少有一個包”readyRead 的語義是“有數(shù)據(jù)可讀”不是“你的消息到了”所以槽函數(shù)里一定要用 while 循環(huán)把緩沖區(qū)讀空否則剩下的包要等下一次數(shù)據(jù)到達(dá)才觸發(fā)信號// src/net/udpreceiver.cpp void UdpReceiver::onReadyRead() { while (m_socket-hasPendingDatagrams()) { const qint64 size m_socket-pendingDatagramSize(); if (size 0) { break; } QNetworkDatagram dg m_socket-receiveDatagram(static_castint(size)); if (!dg.isValid()) { continue; } const Packet::Message msg Packet::decode(dg.data()); if (!msg.valid) { qWarning() drop malformed packet from dg.senderAddress().toString(); continue; // 臟包直接丟棄不要讓異常數(shù)據(jù)進(jìn)業(yè)務(wù)層 } emit messageReceived(dg.senderAddress().toString(), dg.senderPort(), msg); } }三個函數(shù)的關(guān)系要理清hasPendingDatagrams 判斷隊列里還有沒有pendingDatagramSize 返回隊首那個包的長度receiveDatagram 按給定長度取出并返回一個 QNetworkDatagram里面同時帶 senderAddress、senderPort 和 data。傳參時把 pendingDatagramSize 的結(jié)果原樣傳進(jìn)去不要圖省事傳一個大值否則可能把后面的包截斷。emit 出去的是已經(jīng)解包并校驗過的結(jié)構(gòu)體界面層只負(fù)責(zé)展示不做字節(jié)操作。3.4 應(yīng)用層協(xié)議給每個數(shù)據(jù)報加個頭UDP 保留了消息邊界所以不需要像 TCP 那樣處理粘包。但實際項目里仍有兩種情況需要自己定協(xié)議一是同一個端口上要區(qū)分文本、心跳、文件塊等多種消息二是單條業(yè)務(wù)消息可能超過 MTU。這個 Demo 里我用一個固定八字節(jié)的頭來解耦字段類型字節(jié)數(shù)說明magicquint162固定 0x5154快速識別是不是本程序的包versionquint81協(xié)議版本方便后續(xù)兼容typequint811 文本 2 心跳 3 文件塊seqquint324遞增序號僅用于日志和丟失統(tǒng)計payloadSizequint324負(fù)載字節(jié)數(shù)用于校驗// src/proto/packet.cpp QByteArray Packet::encode(quint8 type, const QByteArray payload) { QByteArray out; QDataStream s(out, QIODevice::WriteOnly); s.setByteOrder(QDataStream::BigEndian); // 網(wǎng)絡(luò)字節(jié)序跨平臺必須顯式指定 s.setVersion(QDataStream::Qt_5_15); // 兩端版本要一致否則 QString 序列化格式不同 s quint16(0x5154) quint8(1) type quint32(m_seq) quint32(payload.size()); out.append(payload); return out; }參數(shù)上有兩個必須顯式設(shè)定的東西字節(jié)序和 QDataStream 版本號。默認(rèn)字節(jié)序在小端機(jī)器上是 LittleEndian接收方如果是大端設(shè)備就全亂QDataStream 的版本決定了 QString 等類型的序列化格式兩端不一致時讀出來的長度字段都是錯的。負(fù)載部分直接用 append 塞原始字節(jié)不經(jīng)過 QDataStream避免二次編碼帶來的額外開銷。單包建議控制在 1400 字節(jié)以內(nèi)這個數(shù)和以太網(wǎng) MTU 1500 減去 IP 頭 20 字節(jié)、UDP 頭 8 字節(jié)后的余量有關(guān)超過就要自己分片加序號重組那是另一個話題了。4. 廣播、組播與對端發(fā)現(xiàn)一份代碼覆蓋三種投遞方式單播只能發(fā)給一個已知地址但設(shè)備發(fā)現(xiàn)這類需求是一對多的Demo 里把廣播和組播都放進(jìn)來正是因為它倆是局域網(wǎng)場景下最省事的發(fā)現(xiàn)手段。4.1 廣播setBroadcast 與子網(wǎng)邊界廣播的寫法幾乎是單播加一行開關(guān)// 發(fā)送端允許廣播 m_socket-setBroadcast(true); QByteArray probe Packet::encode(Packet::TypeHeartbeat, QByteArray()); // QHostAddress::Broadcast 等價于 255.255.255.255 m_socket-writeDatagram(probe, QHostAddress::Broadcast, 45454);這里有兩個容易翻車的點。其一不調(diào)用 setBroadcast(true) 直接往廣播地址發(fā)writeDatagram 會返回 -1錯誤信息是“Permission denied”之類的措辭看著像權(quán)限問題實際是套接字沒開廣播選項。其二255.255.255.255 只在本地子網(wǎng)內(nèi)有效路由器不會轉(zhuǎn)發(fā)跨網(wǎng)段必須用子網(wǎng)定向廣播地址比如 192.168.1.255而且要提前算好掩碼。接收側(cè)就更簡單了只要 bind 的是 AnyIPv4 的對應(yīng)端口廣播包會正常觸發(fā) readyReadsenderAddress 拿到的是發(fā)送方的實際 IP。真要用廣播做設(shè)備發(fā)現(xiàn)節(jié)奏上建議“上電連發(fā)三次、間隔 300 毫秒”而不是一直刷。廣播包會被同一網(wǎng)段所有機(jī)器收到頻率高了純屬干擾別人。發(fā)現(xiàn)到對端之后立刻轉(zhuǎn)成單播繼續(xù)通信廣播只用在“我還不知道你是誰”的階段。4.2 組播joinMulticastGroup 與網(wǎng)卡選擇組播比廣播克制只有加入了同一個組地址的進(jìn)程才收得到。組地址范圍是 224.0.0.0 到 239.255.255.255其中 224.0.0.x 段被協(xié)議保留實際項目里習(xí)慣用 239.x.x.x// 接收端綁定任意地址后加入組播組 QUdpSocket *mc new QUdpSocket(this); mc-bind(QHostAddress::AnyIPv4, 45455, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint); bool joined mc-joinMulticastGroup(QHostAddress(239.255.43.21)); if (!joined) { qWarning() join multicast failed: mc-errorString(); } // 發(fā)送端組播包的 TTL 一般設(shè)小一點避免被路由器轉(zhuǎn)出本網(wǎng)段 QUdpSocket *ms new QUdpSocket(this); ms-setSocketOption(QAbstractSocket::MulticastTtlOption, 1); ms-writeDatagram(payload, QHostAddress(239.255.43.21), 45455);綁定地址寫 AnyIPv4 是必須的寫具體網(wǎng)卡地址在某些平臺上會讓 joinMulticastGroup 失敗。多網(wǎng)卡機(jī)器上筆記本同時開著有線和無線很常見joinMulticastGroup 的第二個參數(shù)可以指定 QNetworkInterface否則包可能從錯誤的網(wǎng)卡出去。TTL 設(shè) 1 表示只在本網(wǎng)段傳播這是局域網(wǎng)發(fā)現(xiàn)業(yè)務(wù)里最合理的值。判斷網(wǎng)卡是否選對可以遍歷 QNetworkInterface::allInterfaces() 打印每個接口的 flags看哪個帶 IsUp 和 IsRunning。4.3 心跳與在線列表用 QTimer 維護(hù)對端狀態(tài)UDP 沒有連接狀態(tài)對端什么時候下線你完全不知道所以在線列表只能靠心跳推出來// src/model/peerlist.cpp void PeerList::onHeartbeat(const QString ip, quint16 port) { const QString key QString(%1:%2).arg(ip).arg(port); PeerInfo info m_peers[key]; info.ip ip; info.port port; info.lastSeen QDateTime::currentMSecsSinceEpoch(); info.online true; } void PeerList::sweep() { const qint64 now QDateTime::currentMSecsSinceEpoch(); for (auto it m_peers.begin(); it ! m_peers.end(); ) { if (now - it-lastSeen kTimeoutMs) { // 三個心跳周期沒更新就摘掉 emit peerOffline(it-ip, it-port); it m_peers.erase(it); } else { it; } } }心跳間隔我一般設(shè) 2 秒超時閾值設(shè) 3 個周期即 6 秒容忍偶發(fā)丟包。這里有個細(xì)節(jié)超時不要只靠“最后一次心跳時間”還要考慮本地時鐘被系統(tǒng)校時改掉的情況用單調(diào)時鐘 QElapsedTimer 更穩(wěn)妥示例里用毫秒時間戳是為了好讀。另外心跳包要單獨(dú)一個 type不要和業(yè)務(wù)消息混用否則日志里滿屏都是心跳排查問題時根本看不清。5. 避坑與排查UDP 在真實網(wǎng)絡(luò)里的五條經(jīng)驗Demo 在本機(jī)上跑通不代表能上線局域網(wǎng)環(huán)境里的問題基本集中在端口、地址、編碼和性能這四塊。下面五條是我在類似項目里真真切切碰過的。5.1 現(xiàn)象第二個實例一啟動就收不到包現(xiàn)象同一個程序開兩個窗口做自測第二個窗口的日志一直為空bind 返回 falseerrorString 是“Address already in use”。原因QUdpSocket 的默認(rèn)綁定的綁定模式在多數(shù)平臺上對端口是獨(dú)占的第一個實例沒釋放之前第二個拿不到。解決接收端的 bind 調(diào)用統(tǒng)一加上 QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint兩個實例就能同時監(jiān)聽同一端口數(shù)據(jù)報會被復(fù)制給所有綁定者。需要注意這只適合調(diào)試正式場景里兩個進(jìn)程搶同一端口誰收到包是不確定的。5.2 現(xiàn)象本機(jī)自己發(fā)給自己一條都收不到現(xiàn)象發(fā)送端顯示 writeDatagram 返回了正數(shù)接收端 readyRead 就是不觸發(fā)換到局域網(wǎng)另一臺機(jī)器就正常。原因通常有兩個接收端 bind 的是某塊具體網(wǎng)卡的地址而發(fā)送端發(fā)往 127.0.0.1地址對不上或者目標(biāo)是 255.255.255.255 廣播但接收端綁定到了具體地址廣播包被網(wǎng)卡過濾掉了。解決接收端一律綁 QHostAddress::AnyIPv4讓它監(jiān)聽所有網(wǎng)卡包括回環(huán)自測時優(yōu)先往 127.0.0.1 單播確認(rèn)鏈路通了再試廣播。另外 Windows 上首次運(yùn)行會彈防火墻授權(quán)框點“取消”之后再想收包就得去防火墻規(guī)則里手動放行這個坑很隱蔽。5.3 現(xiàn)象中文消息到對端變成亂碼或者問號現(xiàn)象發(fā)“溫度異常”四個字對方收到的是一串亂碼或者長度對不上解析失敗。原因QString 轉(zhuǎn) char* 時用了隱式轉(zhuǎn)換走的是 Latin-1 編碼中文直接被替換成問號另一種情況是兩端 QDataStream 版本不一致長度字段按不同規(guī)則序列化。解決所有字符串出入都顯式走 toUtf8 / fromUtf8協(xié)議頭里的長度字段按字節(jié)數(shù)算而不是按字符數(shù)算QDataStream 在兩端寫死同一個版本號比如都寫 QDataStream::Qt_5_15。上線前用一段純中文加 emoji 的測試串跑一遍比看十遍代碼管用。5.4 現(xiàn)象高頻發(fā)送時界面卡成幻燈片現(xiàn)象壓測時每秒發(fā)幾百個包界面按鈕點不動日志窗口滾動有延遲。原因有兩個疊加一是每條數(shù)據(jù)報都 emit 一次信號、追加一次日志到 QTextEdit控件重繪成了瓶頸二是 readyRead 里沒把隊列讀空事件循環(huán)反復(fù)被喚醒。解決接收槽里用 while 循環(huán)一次讀光攢到一個 QVector 后再發(fā)一個批量信號界面?zhèn)扔?QTimer 每 100 毫秒合并刷新一次而不是來一條刷一條再不行就把網(wǎng)絡(luò)對象 moveToThread 到獨(dú)立線程用隊列連接把結(jié)果傳回界面。這個改法通常能把 CPU 占用從單核跑滿降到個位數(shù)。5.5 現(xiàn)象大包發(fā)出去了收到的卻是半截現(xiàn)象發(fā)一條幾十 KB 的 JSON接收端解析時報“數(shù)據(jù)不完整”pendingDatagramSize 拿到的長度比預(yù)期小。原因超過了鏈路 MTU 觸發(fā) IP 分片任何一個分片丟失整個數(shù)據(jù)報就作廢更極端的情況下超過 65507 字節(jié)writeDatagram 直接返回 -1。解決協(xié)議層強(qiáng)制單包不超過 1400 字節(jié)超出就按序號切片接收端做重組并設(shè)超時丟棄不完整的組或者干脆把大塊數(shù)據(jù)挪到 TCP 通道上UDP 只承載控制消息。這條屬于設(shè)計階段就要定下來的約束等上線再改代價很大。6. 二次開發(fā)把它抽成一個能復(fù)用的 UdpChannelDemo 里的 Sender 和 Receiver 分成兩個類是便于講解真到項目里我更愿意合成一個 UdpChannel收發(fā)同一個套接字接口窄一點用起來省心。6.1 封裝邊界與接口設(shè)計我的做法是把 bind、發(fā)送、批量接收、對端列表全收進(jìn)去對外只暴露四個東西// src/net/udpchannel.h class UdpChannel : public QObject { Q_OBJECT public: explicit UdpChannel(quint16 localPort, QObject *parent nullptr); bool start(); // bind 連接信號 qint64 sendTo(const QByteArray payload, const QHostAddress to, quint16 port); void enableBroadcast(bool on); signals: void messagesReady(const QVectorPacket::Message batch); // 批量上拋 void errorOccurred(const QString reason); };關(guān)鍵改動有三個。其一接收側(cè)不再逐條 emit攢夠一批或者定時器到點再發(fā)界面?zhèn)扔嗛?messagesReady 就夠了刷新頻率和解包頻率解耦。其二把在線列表也吃進(jìn)來start() 里順帶起心跳定時器和過期清掃定時器調(diào)用方只需要關(guān)心“誰在線”這個信號。其三錯誤統(tǒng)一走 errorOccurred 字符串而不是把 QAbstractSocket 的枚舉拋給上層界面層不該知道 SocketError 是什么。這套接口換到命令行程序或者后臺服務(wù)里照樣能用不依賴任何控件。6.2 驗證方法別急著開界面封裝完先別寫界面用兩個終端驗證鏈路更高效。Linux 或 macOS 上可以用 nc 直接發(fā)一條 UDP 包到本地端口看程序日志有沒有打印對端地址# 終端 1先跑起來你的接收端監(jiān)聽 45454 ./QTUdpDemo --listen 45454 # 終端 2發(fā)一條純文本 UDP 包到本機(jī) printf hello-udp | nc -u -w1 127.0.0.1 45454 # 終端 2 變體發(fā)廣播到當(dāng)前網(wǎng)段需要系統(tǒng)允許 printf probe | nc -u -w1 -b 255.255.255.255 45454看到日志里出現(xiàn) 127.0.0.1 和正確的負(fù)載長度說明 bind 和 readyRead 這條鏈通了再換到另一臺機(jī)器上重試通不過就按第 5 章的順序查網(wǎng)卡地址、防火墻、子網(wǎng)掩碼。之后再測組播用 ip maddr 看網(wǎng)卡有沒有真的加入組這一步能省掉很多“代碼明明沒錯”的爭論。壓測用 for 循環(huán)發(fā)一萬個包統(tǒng)計接收端實際收到的數(shù)量丟包率在局域網(wǎng)內(nèi)應(yīng)該很低如果掉得厲害先看接收端是不是在界面線程里同步處理。這套流程我后來固化成了習(xí)慣每加一個網(wǎng)絡(luò)模塊先寫一個不依賴界面的最小可執(zhí)行用命令行和 nc 打通再把界面接上去。從那以后我每次新建網(wǎng)絡(luò)通信相關(guān)的類都強(qiáng)制先跑一遍自環(huán)和跨機(jī)兩條驗證再動 UI 代碼。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
激情五月天校园春色网| 亚洲丝袜少妇在线| 夜夜久久| 黄色成品网站| 国产不卡片| 五月天婷婷基地| 在线视频日韩欧美国产| 3D污黄视频在线观看| 久热影视| 1级午夜影院费免区| 乱伦强奸区日韩| 91亚洲人| 啊啊啊操死我| 亚洲婷婷综合网| 欧美色宗合| 亚洲精品少妇| 精品福利| 情色图区| 亚洲一区二区AV| 偷拍盗拍亚洲色图图片| 91天天综合| 亚洲AV色图一区| 欧美精品亚洲精品日韩传电影| 日日日大屁股骚女人精品| 91草草草| 208天天久久九九九| 欧美成人一区二区| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 神马久久久久久久| 五月天综合网| 亚洲色图A| 精品妇操一区二区三区| 91狼人| 日韩精品在线视频,日韩精品……| 欧美亚洲国产91在线| 蜜乳AV色欲AVAV无码| 丰满翘臀美女影院视频| 日韩黄色小说| 蜜臀99久| 岛国在线一区二区三区| 伊人影院在线理论播放 | 亚州国产精品乱| 九九九九九用不成了| 日韩综合97p| 性爱Av免费| 蜜臀久久99精品久久久老,,| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 夜夜高潮夜夜爽夜夜爱爱一区| 久久久久久九九九| 永久电影三级在线观看| 成人一区二区三区四区| 亚欧美天堂在线| 五月婷婷综合网| 色情乱伦AV| 国产一区二区三区免费视频在性观看| 97超碰中文在线| 久久久久久无码人妻中文字幕| 观看免费区二区三区二| 日日日日日| 美女被艹尤物视频| 日本一区二区三区四区免费观看| 国产风韵犹存熟妇三区| 黄总AV色图| 91超碰碰在线| 欧美精品精品一区二区| AV男人天堂网| 亚洲欧美高清无码| 丁香九月激情| 91欧美丨精品丨入口| 上床啊啊啊| 欧美黄色片在线播放| 天天日天天色| 蜜桃臀一区二区aV| 国模无码人体一区二区三| 成人AV在线电影| 欧美日韩精品国产91| 女上位精品在线| 中国AV美女| 成人情色一区二区| 精品国产乱子伦一区二区三区,精品一| 国产成人自拍视频视频| 成人在线视频一区| 家庭乱伦麻豆| 日本 欧美 亚中文字幕| 久久久精品一区二区| 久艾草在线精品视频在线观看| 欧美性爱无码一区二区三区| 超碰97护士| 免费国产电影一区二区| 99热色精品| 中文一区二区婷婷视频| 中文字幕精品亚洲熟女| 老熟女综合网| 搡老女人911熟妇老熟女| 欧美久久草熟女| 久久久草草精品| 91天堂| 婷婷色播婷婷| 国产极品一区二区三区三州| 日韩另类色图| 色婷婷日韩精品一区二区三区| 久久人人看| 大香蕉综合网| 丝袜喷水在线| 亚洲欧美自拍偷拍| 日韩精品一区二区高清 | 91高跟美女在线播放| 欧美狠狠| 婷婷亚洲五月***久久| 久久精品国产99国产精品亚洲| 99视频自拍| 伊人在线大香蕉二。| 少妇一线天久久久久久| 永久免费av无码网站国产app| 精品久久99| 操B视频日韩无码| 国产精品视频内谢女人| 久热91| 91大学精品激情戏| 精品无码久久久久久久杏吧| 青青草成人视频在线观看二区| 久九九九九九九九热| 国产 日韩 欧美 人妻 熟女 中文 69人妻精品一区二区绯色 | av婷婷色网| 国内亚洲高清无码| 欧美性爱一区二区三区| 久久精品一区| 99自拍视频在线| 大香蕉免费3| 成年男人的天堂| 精品视频免费在线一区| 激情文学 国产一二三aV| 91丝袜在线观看| 色哟哟AV| 国产精品欧美日韩久久| 91天美免费| 操操啪| 91麻豆天美国产欧美高潮| 日本色色色| 国产色图乱伦| 欧美日韩系列| 综合91网| 熟女丝袜视频| 美女自卫慰黄网站免费| 国产精品毛片?v一区二区三区| 久九九九九九九九热| 人妻人人做人人澡人人爽欧美一区| 台湾佬中文娱乐网久久久久久久久久com | 熟女这里只有精品6| 91操熟女视频| AV中文字幕剧情1区2区3| 韩国三级三级BD在线| 99热精品在线| 亚洲成人久久美女| 亚洲熟女性高潮久久久| 日韩中文字幕视频| 国产精品内射婷婷一级二| 青青操在线视频| 久久嫩草国产成人一区| 亚洲乱色熟女一区| 性天堂| 日韩免费人妻色情网站| 99精品欧美一区二区三区桃色| 理论久久婷婷网8| 丝袜美腿射精91| 日韩精品人妻中文字有码在线| 人人污日韩一区二区| 欧美久久草熟女| 91久久久久久久| 亚洲精品无码少妇久久| 久久久久久AⅤ无码免费肉站 | 色噜噜人妻av 中文字幕| 色嗨嗨在线| 粉嫩AV输入| 久久噜噜噜精品国产亚洲综合| 韩国午夜理伦三级好看| 欧美一区二区三区不卡高清视频| 人妻第一页| 手机在线A片| 99久久亚洲精品无码毛片潘甜甜| www..com操老师| 欧美综合娱乐久久| 久久伊人亚洲AV无码网站| 嫩呦国产一区二区三区AV| 国产日产精品久久快鸭的功能介绍| 大香网站| 超碰成人国产| 日本一级性爱| 囯产操逼片| 99热线麻豆| 91真人天天在线| 伊人网综合在线视频| 久久精品国产精品一区| 精品人妻av区天天看片| 人人操人人操草草| 激情五月丁香五月| 夜夜肏2021| 热天堂一区二区| 四虎影库国产精品免费| 欧美少妇性乱| 精品少妇人妻一区二区三区| 五月婷亚洲精品天堂| 国产亚洲欧美每日在线| 日本 色 导航| 东亚亚洲无码高清| 香蕉99秘 一区精品蜜桃臀| 91丨九色丨东北熟女| 中英熟女操女| 美女网站黄页| 美女丝袜激情小说| 丰满少妇高潮无码| 五月激情在线| 九月AV| 亚洲色图欧美色图制服丝袜| 清纯唯美综合亚洲| 欧美一区二区男人天堂| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 国产动漫操逼视频| 中文字幕五区| 亚洲色图a| 亚洲日本天堂| 亚洲熟久久| 黄色av播放免不| 九九九免费视频| 99热日| 日本A级视频| 欧美老熟另类| 9久热这里只有精品| 95自拍视频在线观看| 亚洲福利中文字幕在线| 夜草欧美| 日韩欧美日韩| 国产麻豆一级精品视频| 日韩欧美中文| 极品粉嫩一区二区| 东京热91| 丰满岳乱妇一区二区三区| 99无码视频| 亚洲日韩国产欧美综合v| JIZZJIZZ国产精品喷水| 大香蕉伊人网WWWn0n| 精品熟妇视频一区二区| 91天堂色男人的天堂| 午夜久久一区二区无码中出| 欧美精品欧美精品系列 | 高潮的A片激情扒开一区| 精品中文字幕第一页| 国产女人和拘做爰视频| 黄片aaaaa一区| 日本在线播放不卡一区| 欧美性爱伊人| 91色艳| 日韩二级| 99后入| 中文字幕av片| 伊人加勒比| 超碰日韩人妻| 国产真实野战在线视频| 长长久久免费视频| 九九热五区| 日韩资源网| 91情色| 国产精品97超碰| 中文字幕一区二区无码成人| 97欧美视频| 久久久久久99AV无码免费网站| 亚洲精品三区在线观看| 综合色99| 欧美一区二区情色| 久久久9 9 9精品| 97频视在线| 无码日韩网站| 日韩免费av片高清无码| 伊人影院综合是一个与深夜成人在线| 激情综合久久| 国产AV天美| 超碰久草| 青草伊人久久| 国产欧美伊人| 一级免费精品| A啊啊在线观看| 日本在线一二| 亚洲人天堂| 欧美十八禁网站| 熟妇亚洲一区二区三区| 亚洲精品91| 国产乱人妻精品入口| 爱丝福利| 天天夜躁日日躁狠狠2002| 国产精品岛国片在线观看| 深爱五月婷婷| 亚洲欧美一区二区不卡视频播放| 欲色综合| 熟妇的味道HD中文字幕| 久久久激情| 亚洲综合有玛| 欧美色图片色哟哟| 国内精品a| 五月婷婷色| 91l欧美在线| 凌辱美少妇久久aV| 在线免费观看日韩一区| 立川理惠无码一区二区| 国产传媒一区日韩| 欧美熟妇色| 中文字幕奈奈美被公侵犯| 99热精品在线播放| 天天插天天操天天摸天天射天天看| 天天综合~91| 妇女性内射冈站HDWWWCOM| 日本3级一区二区免费| 夜夜操av亚洲一区二区| 日韩三级av片| 久久毛卡| 青青草日逼视频| 亚洲精品国产无码高清| 夜嗨影院| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 国产精品乱码久久久| 亚洲精品性爱片| 99色视频| 亚洲AV免费在线| 亚洲无码视频免费在线观看网址!| 免费A片三p视频| 天美麻花大全视频| 91在线/欧洲| 女沟厕偷窥piss小便| 国产高潮AA片免费看| 91成人在线| 色97干| 亚洲日韩美女中文字幕乱| 偷窥自拍亚洲色图| 九九热三级片| 国产一级操B视频| 97玖玖超碰| 1禁看欧美黄片免费看| 99黄页网站| 欧洲精品二区| 美国一区二区免费视频| 热久日综合| 一区在线精品中文字幕| 欧美色图天堂在线| 精品无av| 5278欧美一区二区三区| 亚洲综合贴图91| 9999伦理视频| 无码国产精品午夜不卡(| 99精品欧美一区二区三区桃色| 日本中文字幕在线视频 | 欧美亚洲激情小说| 91在线精品| 国产精品直播在线观看直播| 蜜臀AV成人精品蜜臀| 欧美精品第四五页中文字幕在线观看| 久久久久久久91| 色五月激情综合网| 国产精品动态一区二区三区四四| 国产一级内射无挡观看| 四季AV一区二区凹凸精品小说| 秋霞色色影院| 久久久999网站| 久久久久久久久999| 婷婷五月天网| 97久久久久| 日本午夜精品理论片A级APP发布| 久湿久久| 东亚亚洲无码高清| 免费超碰97久久| 日韩免费在线观看不卡| 欧美成人亚洲精品| 日韩操啪| 亚洲精品一二三四区| 男人的午夜天堂| 九九九九九九九精品视频| 亚洲少妇综合| 另类天堂| 福利视频网站| 天美传媒国产原创中文字幕亚洲欧美另类 | 极品综合| 久草草一二三四区久久| 色噜噜人妻av 中文字幕| 欧洲性人爱视频| 国产毛片在线| 亚洲素人综合| 凹凸视频特色日本特黄| 欧美姓爱综合网| 婷婷五月天综合网| 亚洲天天在线| 人人澡综合涩| 黄色在线网站| 亚洲欧美啪啪| 五月天综合网| 欧美日韩中文视频播放| 亚洲成人一二三区| 国产精品日本无码A片| 精品成人无码| 精品久热| 插插综合网天天影视网| 日韩激情啪啪| 亚洲av无码成人精品国产| 中文字幕在线观看视频www| 黄页视频网站野外| 极品出轨视频网站| 97超碰碰| 91久久堂| 国产AV高清AV无码| 后入国产| 九九九久千久久激情蜜桃在线看 | 日日碰狠狠添天天爽超| 九t超碰| 香蕉久久国产AV一区二区| 久久久久久久97| 极品粉嫩一区二区| 日韩美女操b| 久久一二三四五六七八九区| 美女刺激久久国产欧美| 国产乱伦视频污| 精品网站99999| 操逼视频免费日韩无码| 91老熟妇| 日欧毛片久久| 亚洲激情AV| 国产又黄又粗又猛大片| 青青欧洲黑| 亚欧性爱在线无码| 国产精品视频内谢女人| 久久久久久久9最新免费视频观看| 国内精品久久久久影院亚洲| 国产精品久久久鸭无码的功能| 97超碰超欧美。| 色色婷婷丁香| 欧美激情视频在线一区| 亚欧操逼片在线观看 | 女人被添高潮免费视频| 91综合色噜噜| 亚州Av天美传媒| 狠狠色综合网| 91东京热男人的天堂| 午夜精品久久久99热蜜桃的功能特点| 920日本午夜免费| 日韩操逼性鲍| 密臀在线一区尤物| 久久爱超碰网| AA丁香综合激情| 久久 国产 无码| 夜夜操夜夜高潮夜夜爽国产精品区| 天天摸,夜夜摸| 男人天堂黄片| 精品亚洲天堂| 97超碰人操| 亚洲图片欧美日韩| 无码黑人精品一区二区三区三| 国产AV精久久| 国产精品亚洲一区二区三区四区| 久久婷色| 97超碰天天爱天天爱| 青青青在线高清视频在线一二三四区 | 一起草视频在线| 青青草在线视频欧美| 激情五月天丁香社区| av黄图片在线观看| 午夜操一视频一区| 久久久久久波多野吉衣高潮| 91大学精品激情戏| 333kkkk·亚洲com久久| 日韩成人高清一区二区| 日本布卡一区二三区| 欧美日韩大陆黑人少妇99| 人妻AV在线| 太久视频| 五月天我淫我色av| 成人性生活高清视频在线播放| 亚洲成人色情五月天丁香花| 一区二区三区 丝袜 高跟 美腿| 午夜理论片在线观看免费| 久9re热视频这里只有精品| 96精品久久久| 久草草一二三四区久久| 美女露胸露奶头| 亚洲欧美中文日韩视频中国语| 成人av毛片在线观看| 久久久555| 激情四射五月天| 日韩精品人妻中文字幕有码午| 青青草天天亲夜夜操网| 亚洲第一狼人丝袜美女另类| 丰满美女一级毛片在线播放| 欧美高清91| 国产人人干| 夜夜騷av、一區二區| 欧美躁死她一区二区| 日日夜夜骚| 国产精品无码在线| 亚洲无码太久| 国产毛片片精品天天看视频| rion磁力链接| 亚洲成人AB| 天美一区在线| 狠狠躁天天躁日日躁| 国产精品久久久九九九| 97欧美色| 丁香久久| 久久精品中文字幕无码l| 国产成人99久久亚洲综合| 精品久| 欧美黑人与女人91| 日韩成人人妻网站| 成人一级二级| 亚洲熟女一区| 国产中文福利| 久久久国产精品人妻丝袜| 后入 亚洲 美女 射| 隔壁邻居波多野结衣中文字幕| 91视频综合网| 国产成人主播| 99性爱视频| 狠狠久久手机视频精品| 中文字幕女同在线| 三级片大波波| 国产女人极品高潮毛片| 国产又黄又爽又刺激久久久久久| 97亚洲在线| 久久久久久大| 操逼片中文| 亚洲视频精选| 九九九九精品一区| 操穴国产| 激情色色| 久久亚洲AV无码专区首页| 超碰色老头| 国产精品交换一区二区| 欧美亚洲激情| 欲综合网| 国产浮力影院第1页| 人妻精品视频一区二区三区 | yazhousetuoumei| 久久综合18p| 男人下部插入女人下部| 欧美在线伊人色| 狠狠搞 亚洲91| 亚洲激情 欧美色图| 成人综合网 欧美| 美女大乳久久久久久久女人18| 天堂国产AV| 欧美熟妇乱码在线一区| 久久综合18p| 国产有码一区| 丰满少妇高潮无码| 午夜福利在线合集| 在线电影亚洲色图| 97资源站国产精品| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 岛国AB视频| AV不卡在线| 小情侣高清国产在线视频| 日本污ww视频网站| 亚洲 综合 欧美| 欧美嗯啊……在线观看视频免费| 久久视网78| 97超视频在线观看| 中国女人内射6XXXXX| 亚洲一区二区av| 亚洲图片欧美偷拍| 免费成人在线熟妇网| 超碰97久久国| 91天天c| 久艹伊人精品综合在线| 嗯嗯啊啊用力视频免费| 美女淫穴| 久久久婷婷| 日韩不卡码| 日本免费中文一区二区三区四区 | 天天干人人干天天日97| 综合五月婷婷亚洲一区| 天天干天天操天天干天天操| 91黑丝在线播放| 97福利视频| 91在线页| 国产丰满少妇久久久精品影院| 欧美色图在线视频少妇| 久久人妻熟女一区二区| 精品亚洲一区在线观看| 国产精品久久久久无码AV会牛| 国产美女口爆吞精视频| 日本爽爽爽爽爽爽免费视频| 免费观看性欧美一级| 国产精品日韩在线一区| 国产操逼逼网| 91啪啪视频| 色综合91| B049AV在线播放| 国产玖玖| 黄网在线播放| 日本亚洲vr欧美不卡高清专区| 热99这里有精品综合久久 | 岛国在线一区二区三区| 好爽免费视频| 成人av性爱电影在线观看| www色日本| 9 9精品一区二区三区| 亚洲精品天天影视综合网 | 日韩天天本| 屁股久久久久久| 亚洲欧洲日韩国产自在线| 日韩99999色| 欧美综合综合| 国产久久av| 色盈盈影院| 欧美色图亚洲激情| 凹凸视频特色日本特黄| 亚洲男人的天堂va亚洲男人社| 91在线|亚| 综合色图亚洲欧美| 肥臀熟女福利视频一区二区| 91亚洲影院综合| 我中文字幕6区| 在线观看啊啊啊啊啊| juliaann丝袜| 不卡中文字幕aⅴ在线| 国产综合日韩伦理| 性在久久久久久| 国产AV久久久蜜爱影集| 久久色人体| 伊人一区二区三区| 久操网线| 五月丁香婷婷综合| 亚洲学生妹高清av| 欧美色亚洲色| 亚洲国产精品无石码久久 | 亚洲一区中文精品| 国产欧美日韩在线观看麻豆传媒公司| 91九色丰满高潮| 一级免费啪啪片| 色偷偷男人的天堂麻豆| 天天干人人看综合| 混色激情av| 99re6在线视频精品免费完整版安卓版| 欧美激色| 欧美大波激情xxxx| 午夜免费视频1000| 香蕉免费一区二区三区不读| 欧美天天弄| 日日操免费视频| 俺去也婷婷| 色亚州人久干视频在线观看免费版| 有码专区最新中文字幕有码| 国产黄色在线播放观看| 成人情色一区二区| 97国产精品久久久久| 13小男生GAY自慰脱裤子| www.色综合| 欧美玖玖爱免费玖玖| yaouchengrenav| 人人操人人摸人 | 中文字幕精品一区二| 婷婷丁香六月天| 天天看人人操屄犊摸阴| 人妻少妇精品无码专区二区密桃| 人人贴人人摸| 特级大荫道BBwBBwBBW| 欧美在线|亚洲| 久久成人午夜精品影院 | 五月丁香六月综合缴清无码| 防屏蔽在线视频| 草B在线| 精品一区二区综合熟妇| 夜夜爽爽夜夜精品视频| 成人免费看吃奶视频网站| 国内操逼视频二区| 国产精品蜜臀久久久久无码AV| 久久久久久久久久久久久久久乱码 | 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 嗯嗯啊啊啊好舒服| 亚洲欧美日韩制服另类| 97超碰天天| 午夜操逼不卡| 九九九精品一区二区无码| 国产熟女完整版中字| 国产精品色| 中文字幕在线日亚洲9| 国产亚洲 中文欧美久久| 欧美92| 久久久久久久久久久人妻| 色哟哟 日韩精品| 国产偷仑| 日本国产成人亚洲精品无码| 亚洲中文一区二区三区| 综合免费无码中文| 极品尤物女神在线观看| 一本色道熟妇| 操逼啊啊啊91| 97久久综合网| 中文字幕一区 二 区 三 四 五 区日 日 骚| 久久精品28| 日本不卡三级网在线播放| 男人的天堂午夜av| 九九九九九九九| 国产这里只有精品| 久久免费99精品久久久久久| 亚洲精品一卡二卡三卡福利视频网站| 8050午夜少妇无码| 2019天天干| 免费超碰97久久| 性爱综合网| 亚洲男人久久综合天堂| 超碰视97中文| 亚洲AV免费在线观看| 天天弄天天操| 亚洲成人ab| 久久伦理视频久久大香蕉视频| 成片免费观看视频大全| 国产91亚洲精品一区二区三区| 极品一区二区三区免费| 国产视频三区四区| JULIA一区二区三区在线播放| 亚洲97综| 亚洲欧美国产精品久久久久久久| 99re这里只有精品3| 日产狠狠干| 国产99久久99热这里只有精品15| 综合色好色| 国产精品3| 亚洲不卡av在线| 五月天激情影院| 尹人大香蕉视频在线| 91影视亚洲| 欧美中文字幕男人天堂久久精品| 91久久精品中文字幕| 欧美色999| 中文字幕黄色一起草| 好舒服视频| 蜜桃网熟妇| 香港成人一级视频在线青青草| 嗯啊不要在线| 日本一级二级三级网站| 国产在线能看的你懂的| 人人操人人肉久久精品| 夜夜嗨老熟女AV一区二区三区| 有码人妻系列| 97国产精品国| 九九热视频在线观看| 免费视频a级毛片免费视频| 成全在线观看免费观看| 亚洲春色一区二区三区| 男人天堂2030| 日韩欧美三级| 破处bbq| 很狠操| 我中文字幕6区 | 久久综合婷婷| 欧美Ⅴ性爱| 亚洲成人ab| 亚洲人妻av| 猛交交| .精品人妻一区二区三| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 久久久久久久久久久精| 欧亚韩国999| 久热超碰| 99久久9| 涩五月婷婷| 中文字幕一区av| 少妇超碰在线| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 超碰97综合在线| 人妻熟女一区二区在线视频| com 首页 18岁 禁区 女优 免费 精选 同城 | 97精品97| 欧洲精品欧洲精品| 99最新日韩偷拍视频| 欧美后入式| 国产精选视频| 99re免费| 中文乱码字字幕在线第5页| 乱操乱伦AV| 一区二区三区高清天码| 少妇xx精品| 免费看日产一区二区三区| 丁香五月偷拍| a男人的天堂| 久久久专区| 亚洲一本色码中文字幕| 超碰97综合网| 精品999999| 一起草欧美| 成视频在线观看免费看| 欧美日韩丝袜 | 激情视屏国产乱伦强奸| 五月丁香成人网| 久久毛卡| 丁香六月综合激情| 日日夜夜国产综合| 9ⅰ久久久天天| 性爱欧美五月| 欧美青青视频| 亚洲91av| 激情欧美日韩女同久久| 超碰久草| 日韩欧美大片免费高清啪啪| 国产精品成人福利在线| 超碰av在线| 午夜欧美神马久久久久| 91天堂丝袜美腿| 亚洲日韩精品久久久久一区壹牛| 黄色网址在线免费观看| 91亚洲黑人| 免费97视频| 大香蕉伊人网| 自拍偷拍2025在线观看| 四季AV综合网址| 亚洲天堂资源在线| 成人性爱AV在线免费观看| 东京热免费视频| 2017大香蕉国产精品久久| 国产精品久久久久久久久久久久久久吹 | 激情综合av| 青青草好吊色| 97超碰磁| 天天日老熟妇| 色噜噜日韩精品| 国产精品原创巨作?v网站| 美女啪欧美一区| 日本九九久久99| 亚洲最新Av| 爱射综合| avav青青草久久夜| 欧美一级特黄淫片在线观看| 久久本道| 欧插网站| 国产精品日日摸天天碰| 国产偷拍自拍在线视频| 国产又大又粗又长视频在线| 日韩AV噜噜噜一区二区三区四区| 91午夜无码| 免费人人搞97| 国产捆绑一区| 大香蕉宗合网在线| 日韩91网| 91蜜桃婷婷狠狠久久综合9色| 欧美成人色| 嫩草在线视频| 性老妇一区二区三区| 人人操 欧美| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 劲爆欧美人妖三区91| 亚洲综合第一页| 精品国产乱码久久久久久久久1| 亚洲狠| 999岛国大片| 91亚.色| 日韩欧美亚洲一区二区三区影院| 美女网站黄页| 午夜高清成人在线视频| 操99| 97亚洲国产影视| 日本在线999| 91社区拍啪人妻| 97精品国产精品免费观看| 一级性爱视频免费观看 | 天堂av2019| 亚洲在线网站| 干B| 欧美黄片免费在线观看视频| 熟妇人妻一区二区三在线 | 操b在线观看| 黄色不卡视频| 精品毛片久久久精品毛片| 啊啊啊啊免费视频| 夜色五月天| 日韩黄色片子| 97天天在线| 日本色色网| 视频国产成人精品日本亚洲18| 亚洲人妻熟妇三十三区| 影音先锋乱| 亚州综| 极品内射| 少妇高潮对白在线观看| 精精品人妻一区二区三区| 97亚洲性爱| 国产高清MV操逼视频| 加勒比99999| 吉田爱美AV在线| 亚洲精品日韩国产欧美| 天天综合网91| 日日妻色网| 丝袜美腿诱惑亚洲欧美视频在线观看| 岛国A V在线免费看| 熟妇女伦乱视频视频| 天美国产三级传媒| 午夜九九| 国产怡红院| 国产亚洲禁久一区二区| 亚洲 暴爽 AV人人爽日日碰| 激情五月天社区| 亚洲av噜噜噜噜噜噜| 操逼无毒无码免费视频| 欧美黑人猛交春色影视大全| 日韩久久.一级黄色片| 天天做天天爱| 啊啊啊啊在线播放| 91jk色拍| 欧美毛片在线网| 99在线无码精品秘 入口黑人| 97视频在线看| 国产91丝袜在线播放蜜月| 国产有码一区| 五月丁香啪啪啪| 人人人人插| 思思热在线视频免费| 国产白丝网站| 精品白丝一区| 116美女午夜| 99热| 在线看免费无码AV天堂的| 一本色道综合久久欧美| 久久精品国产亚洲粉嫩| 加勒比伊人综合| 丁香婷婷激情五月天无毒不卡| 国产按摩一区二区三区| 人妻熟女av国产网站| 日本性爰一道本| 美日韩男女操屄视频| 久久春色| 97中文热色| 性欧美| 超碰综合97在线| 粉嫩小泬久久久一区二区| 亚洲国产青青| 伊人五月天激情| 精品久久99| 日韩欧美亚洲一区二区三区影院| 欧美天天综合网| 国产一区二区在线播放| 欧亚 另类 久| 中文字幕一区二区三区人妻不卡| 天欧美在线| 狠狠爱夜夜干| 国产中文日韩欧美一区二区三区人妻丝袜美腿| 玖玖综合色| 伊人久久大香线综合无码| 秋霞午夜视频一区二区| 91夜色chaopeng| 天天看片麻豆| 午夜毛片高清免费不卡| 色五月激情AV在线| 亚洲激情欧美色图 | 激情五月天校园春色网| 人妻人妻天天碰| 亚州大图综合色图| 极品美女嘿咻| 夜夜骑夜夜操| 成人av在线播放| 家庭乱伦性爱av| 天天插天天操| 亚洲阿v天堂在线| 国内毛片欧美香蕉精品| 久久久久久久九九九九九九| 午夜男人av| 色综合色| 97视频在线观看播放与子乱对白在线…… | 伊人网免费视频| 午夜福利在线合集| 国产激情综合| 97精品国产97久久久久久免费| 校园春色欧美色图| 亚洲欧美精品久| 91亚洲最新在线| 毛片久久| 在线免费观看日韩一区| 99综合| 国产盗摄美女如厕大神作品在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 97在线欧| 天天澡天天爽日日AV| 欧美色视频在线| 综合熟女| 97久精品| 日产成人久久| 国语av狠狠色丁香婷婷综合激情| 国产人妖视频一区在线观看| 国产 码在线成人网站| 69综合网| 夜夜免费视频| 老司机午夜精品视频| 999国产精品999| 91丝袜美腿网站| 亚洲高潮影院| 人人摸.人人色| 好吊妞转入那个网| 岛国不卡超碰护士AV在线播放| 日本不卡一区| 秋霞一级视频在线观看免费| 欧美激情一区二区| 偷拍亚洲情色| 亚洲一区二区三区中文字幕| 91oumei| 久久精品女同亚洲女同13| 呦呦影院| 超91综合网| 国产夫妻性生活视频| 亚洲自拍天堂| 日韩一级二级在线| 久久久久久久唑| 国产超碰| 亚洲天堂久| 一区二区三区亚洲| 老师充足的奶水小说| 久操精品| 美女尤物福利视频| 九九人人操| 91亚州欧美| 人妻熟女一区二区三区视频| 黑丝自慰喷水网站| 刺激精品视频| 天堂69亚洲精品中文字| 小草精彩毛片| 九九热只有精品| 国模精品一区二区三区苹果色戒| 日韩中文字幕宗合在线| 欧美1区二区三区公司| 色婷婷综合久久久久中文一区二区| 亚洲色欧美| 欧美色偷拍| 日日夜夜精品视频| 久妇网| 青青草国产欧美非洲黑人| 日韩三级一区 | 亚洲 日本 不卡| 欧美在线视频99| 超碰九区| 国产精品自产拍在线观看社区| 欧美97日韩精品| 国产宅男宅女在线观看| 偷拍五区| 无码国产精品久久久久| 91网站18+| 亚洲激情综合| 91亚洲情色| 国内黄色精品| 天天激情干| 亚洲精品人伦一区二区| 熟女视频久久| 少妇高潮九九九九| 日本不卡三级网在线播放| 黑人精品一区二区在线播放| 91精品国久久久久久无码| 九九干| 中文字幕一品色图| 水野优香在线观看| 偷拍综合网| 狠综合网| 亚洲欧美成人在线| 777超碰| 欧美在线55555| www.人人cao| 伊人国产AV| 91久久精品国产| 欧美一级特黄淫片在线观看| 欧美洲精品一级| 色婷婷小说| 插入逼91| 国产欧洲精品亚洲午夜拍精品| 视频在线观看免费一区二区三区| 精品9999| 另类图片五月| 亚洲熟女乱色一区二区三区| 久久精品国产久精国产| 97人妻碰碰中文无码久热丝袜| 亚洲无线观看久久| ...日韩成人一区二区三区字幕| 开心五月婷婷激情| 99久久久无码精品国产人| 91欧| 黄资源| 97中文超碰| 色牛牛AV| 国产美女口爆吞精视频| 抽插一区二区视频| 后入人妻一区| 97久久视频| 久久无码成人| 国产91精品在线免费| 久久精品人妻一区二区三区| 欧美三级一级| 激情五月天色色网| 国产精品嫩草影院免费| 无码人妻精品酒店| 曰本道人妻久久久在线不卡色视频| 天天看片天天爽| 99精品热| 伊人黄色视频免费观看| 看免费一级在线播放毛片| 91日韩国产欧美亚洲另类精盘州至城都| 超91综合网| 999熟女精品| 手机午夜电影神马久久| 日韩精品 资源| 99久久国产精品免费高潮| 麻豆精品三区视频| 中文字幕高清20页视频 | 综合大香蕉美。| 99精品伊人| 丝袜综合色图| 人妻密肉在线观看| 91社区拍啪人妻| 影视综合无码少妇| 亚洲一区中文精品| 97超碰人人操人人操| 欧美 亚洲| AV天堂因数| JuliaAnnXXX888| 青青伊人久久| 后入式在线免费观看60秒| 日欧美色| 熟女自慰久久久| 国产天天骚| 粉嫩国产精品久久久| 色老汉色| 人妻精品一区二区全免费| 国产视频三区四区| 99国产精品在线观看| 亚洲AV资源| 日韩/97| 自拍视频大全亚洲专媒视频/一区二区三区| 亚射在线| 美女AV一区二区| 熟女高潮合集-永久久久-成人AV| 97在线观视频免费观看| 狠狠躁日日躁夜夜躁A| 亭亭在线资源| 日本高清一本二本免费不卡| 一区二区播放| 欧美激情精品| 欧美天天射| 午夜福利一区二区影院| 日本免费专区| 婷婷91| 欧美第一页性| 伊人丝袜美腿高跟在线观看高清 | 天天看综合网| 青春草A| 91精品国产91久久久久久久久久久久| 97国产|免费| 青草成人免费视频一com| 国模无码人体一区二区三| 久久国产热视频97电影| 久久久国产成人一区二区三区在线| 少妇人妻好深太紧了vr91| 国产精品久久久久中文字幕| 国产一区二区在线电影| 亚洲一区二区麻豆影院| 色五月亚洲| 嗯嗯啊在线视频| 日韩ab网| 91处女在线视频| 男人久久天堂| 2019久久久久久久久福利| 五月激情在线| 国产亚洲精品美女|