99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

MFC TCP Socket實戰(zhàn):CAsyncSocket異步通信與粘包處理

MFC TCP Socket實戰(zhàn):CAsyncSocket異步通信與粘包處理 簡介這份壓縮包面向Windows平臺網(wǎng)絡(luò)編程入門與進階學(xué)習(xí)者圍繞基于Socket的TCP通信用MFC搭建客戶端/服務(wù)器C/S架構(gòu)示例幫助理解連接建立、數(shù)據(jù)收發(fā)與連接關(guān)閉的完整流程適合課程實驗、自學(xué)練習(xí)和項目原型參考。包內(nèi)共4個文件以2個cpp源文件和2個h頭文件組成整體約6KB體量輕便便于直接對照閱讀與二次練習(xí)。已有1264人學(xué)習(xí)下載說明其在MFC網(wǎng)絡(luò)編程練習(xí)場景中具有一定參考價值。代碼圍繞CSocket對象的使用展開覆蓋Winsock初始化、服務(wù)器綁定監(jiān)聽與接受連接、客戶端連接服務(wù)器以及Send/Receive收發(fā)數(shù)據(jù)和Close釋放資源等關(guān)鍵環(huán)節(jié)能夠幫助讀者把抽象協(xié)議概念落到具體調(diào)用上。讀者可借此梳理MFC對Winsock的封裝方式理解客戶端與服務(wù)器對話框類的職責(zé)劃分并在此基礎(chǔ)上調(diào)試、擴展自己的TCP通信程序。1. 從一次“連不上”的調(diào)試說起這套 MFC TCP 程序到底解決什么問題把 MFC、TCP、Socket 三個詞湊進同一個工程真正卡人的往往不是 API 名字記不住而是 MFC 的消息循環(huán)、線程模型和窗口生命周期怎么跟網(wǎng)絡(luò)收發(fā)共存。這套 C/S 架構(gòu)程序把服務(wù)端監(jiān)聽、客戶端連接、消息收發(fā)、日志顯示拆成幾個職責(zé)清晰的類用 CAsyncSocket 的異步事件模型驅(qū)動收發(fā)適合做局域網(wǎng)聊天、設(shè)備指令下發(fā)、上位機通信這類小體量工具的原型也適合剛接觸網(wǎng)絡(luò)編程、想看清一次連接從建立到斷開完整鏈路的開發(fā)者。它不追求高并發(fā)指標追求的是結(jié)構(gòu)清楚、每一步都能打斷點看明白。2. 工程結(jié)構(gòu)與選型先定 CAsyncSocket 和 CSocket 的邊界動手寫代碼之前工程怎么切分、用哪套 socket 封裝比后面寫多少行都關(guān)鍵。很多人一上來就把CAsyncSocket塞進對話框類里結(jié)果一個OnReceive里既有界面刷新又有協(xié)議解析改到第三個功能就再也理不清了。2.1 一份可以直接編譯的雙工程目錄這個項目按“共享協(xié)議 服務(wù)端 客戶端”三塊切Common放兩端都要用的頭文件Server和Client各是一個獨立的 MFC 對話框工程編出來的兩個 exe 可以分別跑在兩臺機器上也可以在同一臺機器上開兩個實例自測。MfcTcpCS/ ├── Common/ │ ├── Protocol.h // 包頭結(jié)構(gòu)、消息類型枚舉、字節(jié)序轉(zhuǎn)換 │ └── PacketBuffer.h // 收包緩沖區(qū)負責(zé)粘包/半包切分 ├── Server/ │ ├── ServerApp.h/.cpp // CWinApp 派生InitInstance 里調(diào) AfxSocketInit │ ├── ServerDlg.h/.cpp // 主對話框日志、在線列表、廣播下發(fā) │ ├── ListenSocket.h/.cpp // CAsyncSocket 派生只負責(zé) accept │ └── ClientSocket.h/.cpp // 每個連接一個實例負責(zé)收、發(fā)、切包 └── Client/ ├── ClientApp.h/.cpp ├── ClientDlg.h/.cpp └── ClientSocket.h/.cppListenSocket和ClientSocket都從CAsyncSocket派生但職責(zé)完全不同前者一輩子只干一件事——把新連接從內(nèi)核隊列里撈出來后者是“一線工人”一個實例對應(yīng)一條 TCP 連接負責(zé)這條鏈路上的全部讀寫和異常處理。把這兩件事拆開后面加“最大連接數(shù)限制”“IP 黑名單”才有地方插。ServerDlg只做三件事接按鈕、寫日志、維護在線列表。它不直接持有 socket 的讀寫邏輯所有網(wǎng)絡(luò)事件通過自定義窗口消息回到這里這樣界面線程永遠不會被阻塞。類基類職責(zé)生命周期CListenSocketCAsyncSocket監(jiān)聽端口處理 OnAccept與主對話框同壽CClientSocketCAsyncSocket單連接收發(fā)、切包、斷線檢測連接建立時 new連接關(guān)閉后 deleteCServerDlgCDialogExUI、日志、連接表托管整個進程PacketBuffer無自寫粘包拆包歸屬 CClientSocket2.2 三種寫法怎么選原生 Winsock、CAsyncSocket、CSocket原生 Winsock 最透明WSAStartup、socket、bind、listen、select全部自己管代價是事件分發(fā)要手寫一個select循環(huán)套著幾十行FD_ISSET判斷新手很容易在錯誤處理上栽跟頭。CAsyncSocket是 MFC 對 Winsock 的薄封裝底層通過異步窗口消息把FD_ACCEPT、FD_READ、FD_WRITE、FD_CLOSE轉(zhuǎn)成虛函數(shù)回調(diào)也就是常說的OnAccept、OnConnect、OnReceive、OnSend、OnClose。它不會阻塞調(diào)用線程天然適合掛在對話框上跑。CSocket又往下派生了一層內(nèi)部自帶一個隱藏窗口和阻塞循環(huán)配合CSocketFileCArchive能寫出接近文件讀寫的代碼。上手最快但坑也集中阻塞特性會卡住 UI 線程和CArchive搭配時Receive讀到的字節(jié)數(shù)和對端Send的字節(jié)數(shù)沒有一一對應(yīng)關(guān)系半包一來就拋異常而且異常棧往往看不出真正原因。這個項目選CAsyncSocket理由很實際協(xié)議體就是二進制塊和字符串沒有復(fù)雜的對象序列化需求異步回調(diào)配上自己維護的收包緩沖區(qū)控制權(quán)在我手里。常見做法是——消息頻率低、協(xié)議簡單CAsyncSocket足夠真要傳大文件、需要做背壓控制反過來用獨立工作線程加阻塞 socket把收發(fā)和 UI 徹底隔離反而更省心。3. 服務(wù)端拆解監(jiān)聽、accept 和多連接托管服務(wù)端是整條鏈路的起點它出問題的表現(xiàn)往往很隱蔽——客戶端那邊只看到“連接被拒絕”或者“連上三秒就斷”真正的原因藏在服務(wù)端的初始化順序和對象生命周期里。3.1 初始化和監(jiān)聽AfxSocketInit 到 ListenAfxSocketInit()必須在任何 socket 調(diào)用之前執(zhí)行它內(nèi)部完成了WSAStartup并把版本號協(xié)商好。放到CWinApp::InitInstance的最前面是最省事的做法漏掉這一步后面所有 socket 調(diào)用都會返回WSAStartup未執(zhí)行的錯誤而且錯誤碼不直觀。// ServerApp.cpp BOOL CServerApp::InitInstance() { // 必須在任何 socket 調(diào)用之前完成 Winsock 初始化 if (!AfxSocketInit()) { AfxMessageBox(_T(Winsock 初始化失敗程序退出)); return FALSE; } CWinApp::InitInstance(); CServerDlg dlg; m_pMainWnd dlg; dlg.DoModal(); return FALSE; // 對話框關(guān)閉即結(jié)束不再進入默認消息循環(huán) }InitInstance的返回值這里特意給了FALSE。原因是主界面是模態(tài)對話框DoModal返回意味著用戶已經(jīng)關(guān)窗此時如果再進CWinApp::Run的消息循環(huán)進程會卡在一個沒有窗口的循環(huán)里任務(wù)管理器里看著像僵尸進程。真正開始監(jiān)聽的動作放在對話框的按鈕響應(yīng)里方便反復(fù)啟停// ServerDlg.cpp —— “開始監(jiān)聽”按鈕 void CServerDlg::OnBnClickedBtnListen() { if (m_pListen ! nullptr) return; // 防重復(fù)點擊 m_pListen new CListenSocket(this); if (!m_pListen-Create(m_nPort, SOCK_STREAM)) { DWORD err GetLastError(); AppendLog(_T(創(chuàng)建監(jiān)聽套接字失敗錯誤碼 %u), err); delete m_pListen; m_pListen nullptr; return; } if (!m_pListen-Listen(5)) { AppendLog(_T(Listen 失敗錯誤碼 %u), GetLastError()); m_pListen-Close(); delete m_pListen; m_pListen nullptr; return; } AppendLog(_T(已在 %u 端口開始監(jiān)聽), m_nPort); GetDlgItem(IDC_BTN_LISTEN)-EnableWindow(FALSE); }Create的第一個參數(shù)是端口傳 0 會讓系統(tǒng)隨機分配一個可用端口這在做多實例自測時很有用通過GetSockName能拿回實際端口。第二個參數(shù)SOCK_STREAM對應(yīng) TCPSOCK_DGRAM是 UDP寫錯了不會編譯報錯但行為完全不同。Listen的參數(shù)是 backlog指的是內(nèi)核等待隊列的長度不是最大并發(fā)連接數(shù)很多人以為調(diào)大它就等于提高并發(fā)上限實際上它只影響“三次握手完成但還沒被 accept 取走”的連接能排多長隊。這個值一般給 5 到 10 就夠局域網(wǎng)工具用。GetLastError返回 10048 是端口被占用八成是上一次調(diào)試時進程沒退干凈返回 10013 是權(quán)限不夠通常是端口號小于 1024。3.2 OnAccept一次事件里把隊列收干凈CAsyncSocket的OnAccept是邊沿觸發(fā)式的通知——內(nèi)核告訴你“有連接進來了”但不會告訴你“有幾個”。如果回調(diào)里只Accept一次而恰好同一瞬間來了三個客戶端剩下的兩個就會一直躺在隊列里直到下一次有新連接觸發(fā)事件才被順手取走。表現(xiàn)出來就是“客戶端連上了但服務(wù)端列表里沒有”或者“第二個客戶端連不上”。// ListenSocket.cpp void CListenSocket::OnAccept(int nErrorCode) { if (nErrorCode ! 0) { m_pDlg-AppendLog(_T(OnAccept 錯誤碼 %d), nErrorCode); CAsyncSocket::OnAccept(nErrorCode); return; } // 循環(huán) accept直到隊列里沒有待處理連接 for (;;) { CClientSocket* pClient new CClientSocket(m_pDlg); if (!Accept(*pClient)) // 失敗說明隊列空了或者出錯 { delete pClient; // 這里必須回收否則每來一次事件泄漏一個對象 break; } m_pDlg-AddClient(pClient); // 交給主對話框托管進入在線列表 } CAsyncSocket::OnAccept(nErrorCode); }Accept的第一個參數(shù)是“用來承載新連接的CAsyncSocket對象”所以必須在調(diào)用前 new 出來。失敗時一定要delete這是最容易漏的一行——每次空 accept 都會泄漏一個對象和它內(nèi)部持有的 SOCKET 句柄跑一晚上能把句柄耗光最后表現(xiàn)成“新連接全都失敗”。循環(huán)的退出條件就是Accept返回FALSE此時GetLastError通常是WSAEWOULDBLOCK意思是隊列已經(jīng)空了正常情況不用當錯誤處理。3.3 連接對象托管和銷毀誰 new 誰 delete服務(wù)端的連接表放在CServerDlg里用CArrayCClientSocket*, CClientSocket*或者std::vector都行。關(guān)鍵約定只有一條對象由對話框創(chuàng)建、由對話框刪除CClientSocket自己絕不delete this。斷線時OnClose會被觸發(fā)但此時對象還在 MFC 的異步通知鏈路里直接刪自己會導(dǎo)致回調(diào)返回后訪問已釋放內(nèi)存典型表現(xiàn)是關(guān)閉客戶端后服務(wù)端彈“內(nèi)存不能為 read”。// ClientSocket.cpp void CClientSocket::OnClose(int nErrorCode) { // 不能在這里 delete this拋回 UI 線程統(tǒng)一釋放 if (m_pDlg ! nullptr) m_pDlg-PostMessage(WM_CLIENT_GONE, (WPARAM)this, 0); CAsyncSocket::OnClose(nErrorCode); } // ServerDlg.cpp —— 自定義消息的處理 LRESULT CServerDlg::OnClientGone(WPARAM wParam, LPARAM) { CClientSocket* pClient reinterpret_castCClientSocket*(wParam); RemoveClient(pClient); // 從在線列表移除 pClient-Close(); // 先關(guān)句柄 delete pClient; // 再刪對象 return 0; }PostMessage和SendMessage在這里有本質(zhì)區(qū)別PostMessage只是投遞立即返回不會在 socket 回調(diào)里同步執(zhí)行刪除邏輯SendMessage會等待消息處理完才返回等于在回調(diào)里就把自己刪了必崩。注意Close()要和delete分開寫順序反了會導(dǎo)致CAsyncSocket析構(gòu)時去關(guān)一個已失效的句柄調(diào)試版會彈斷言。4. 收發(fā)層拆解粘包、半包和跨線程回 UITCP 是字節(jié)流不是消息流。這條常識誰都背得出但真寫起來Receive一次讀到半條消息、或者兩條消息粘在一起的情況幾乎每個人都會遇到一次。收發(fā)層的設(shè)計目標就一個讓上層拿到的一定是完整的一條消息。4.1 定長包頭加變長包體協(xié)議頭固定 12 字節(jié)包體長度可變這樣切包邏輯最簡單也最不容易出錯。// Protocol.h #pragma once #include WinSock2.h #define PKT_MAGIC 0x4D464354 // MFCT用來快速判斷是不是自己的協(xié)議 #pragma pack(push, 1) // 必須 1 字節(jié)對齊否則 sizeof 會帶上填充字節(jié) struct PacketHeader { UINT32 magic; // 魔數(shù)防串協(xié)議 UINT32 length; // 包體字節(jié)數(shù)網(wǎng)絡(luò)字節(jié)序 UINT16 type; // 消息類型 UINT16 reserved; // 預(yù)留方便以后擴展 }; #pragma pack(pop) enum PacketType : UINT16 { MSG_LOGIN 1, // 客戶端上線 MSG_TEXT 2, // 文本消息 MSG_HEART 3, // 心跳 MSG_LOGOUT 4 // 主動下線 }; static const UINT32 MAX_BODY_LEN 1024 * 1024; // 單包上限 1MB防惡意超長包#pragma pack(push, 1)這行不能省。默認對齊下UINT32 UINT32 UINT16 UINT16剛好 12 字節(jié)沒問題但只要以后加一個UINT8字段編譯器就會補 3 個填充字節(jié)兩端算出來的sizeof不一致切包直接錯位而且錯得很隨機——改了結(jié)構(gòu)體的人自己測沒事別人拉下來就崩。length字段走網(wǎng)絡(luò)字節(jié)序發(fā)送前htonl收到后ntohl。x86 是小端兩端都是 Windows 時看著“不轉(zhuǎn)也能跑”一旦以后接個 ARM 板子或者用別的語言寫客戶端立刻翻車。這個轉(zhuǎn)換成本幾乎為零沒有理由省。4.2 OnReceive 里循環(huán)讀到 WSAEWOULDBLOCKOnReceive同樣是“有數(shù)據(jù)了”的邊沿通知一次回調(diào)里內(nèi)核緩沖區(qū)可能已經(jīng)堆了好幾 KB。只Receive一次的話剩下的數(shù)據(jù)要等下一次事件而如果對端就發(fā)了這一批然后不說話剩下的字節(jié)會一直卡著表現(xiàn)成“消息只收到一半就沒了”。// ClientSocket.cpp void CClientSocket::OnReceive(int nErrorCode) { if (nErrorCode ! 0) { OnPeerGone(); return; } char buf[4096]; for (;;) { int n Receive(buf, sizeof(buf)); if (n SOCKET_ERROR) { int err GetLastError(); if (err WSAEWOULDBLOCK) break; // 讀空了正常退出 OnPeerGone(); // 其他錯誤按斷線處理 return; } if (n 0) { OnPeerGone(); // 對端正常關(guān)閉 return; } m_recvBuf.Append(buf, n); } ParseBuffer(); // 緩沖夠了就切包分發(fā) CAsyncSocket::OnReceive(nErrorCode); }三個退出條件要分清楚WSAEWOULDBLOCK是“暫時沒數(shù)據(jù)了”屬于正常n 0是 FIN 包對端主動關(guān)了其他錯誤碼才是真異常比如 10054 是連接被對端重置。ParseBuffer負責(zé)把緩沖區(qū)里的字節(jié)按包頭切開// ClientSocket.cpp void CClientSocket::ParseBuffer() { while (m_recvBuf.GetSize() (int)sizeof(PacketHeader)) { PacketHeader hdr; memcpy(hdr, m_recvBuf.GetData(), sizeof(hdr)); if (hdr.magic ! PKT_MAGIC) { Close(); return; } // 不是本協(xié)議直接斷 UINT32 bodyLen ntohl(hdr.length); if (bodyLen MAX_BODY_LEN) { Close(); return; } // 防御性檢查 int total sizeof(hdr) (int)bodyLen; if (m_recvBuf.GetSize() total) break; // 半包等下一批數(shù)據(jù) Dispatch(hdr.type, m_recvBuf.GetData() sizeof(hdr), (int)bodyLen); m_recvBuf.RemoveHead(total); // 消費掉這一包 } }bodyLen的合法性檢查看起來多余實際上是一條防線如果對端發(fā)來一個聲稱 4GB 長度的包頭沒有這行判斷后面的GetSize() total永遠為真緩沖區(qū)會一路漲到內(nèi)存爆掉而日志里什么都不會打印屬于典型的黑匣子問題。4.3 Send 只發(fā)出去一部分怎么辦Send的返回值是“本次實際寫進內(nèi)核發(fā)送緩沖區(qū)的字節(jié)數(shù)”它可能小于你請求的長度。局域網(wǎng)內(nèi)幾乎不會發(fā)生但在批量廣播或者對端接收窗口滿的時候就會出現(xiàn)。忽略返回值、直接認為發(fā)送成功是這類程序最常見的隱性 bug。// ClientSocket.cpp bool CClientSocket::SendPacket(UINT16 type, const void* body, UINT32 bodyLen) { if (m_hSocket INVALID_SOCKET) return false; PacketHeader hdr; hdr.magic PKT_MAGIC; hdr.length htonl(bodyLen); hdr.type type; hdr.reserved 0; // 先把包頭和包體拼成一個連續(xù)緩沖區(qū)再發(fā)避免兩次 Send 之間插進別的包 CByteArray pkt; pkt.SetSize(sizeof(hdr) bodyLen); memcpy(pkt.GetData(), hdr, sizeof(hdr)); if (bodyLen 0) memcpy(pkt.GetData() sizeof(hdr), body, bodyLen); int total (int)pkt.GetSize(); int sent 0; while (sent total) { int n Send(pkt.GetData() sent, total - sent); if (n SOCKET_ERROR) { int err GetLastError(); if (err WSAEWOULDBLOCK) { // 發(fā)送緩沖區(qū)滿簡單項目里直接視為失敗交給上層重連 return false; } return false; } sent n; // 必須累加否則會重復(fù)發(fā)送同一段數(shù)據(jù) } return true; }把包頭和包體拼成一次Send是刻意的如果先發(fā)頭、再發(fā)體中間被別的線程插進來發(fā)了一個包對端就會按“頭-別人的頭-別人的體-自己的體”切直接錯亂。要么拼成整塊發(fā)要么加發(fā)送隊列串行化簡單項目選前者。WSAEWOULDBLOCK在發(fā)送側(cè)的處理要按場景定聊天工具可以失敗重試廣播場景最好維護一個發(fā)送隊列等OnSend回調(diào)來了再繼續(xù)。這里為了代碼量控制直接返回失敗由上層提示“發(fā)送失敗”。4.4 跨線程回 UIPostMessage 加堆對象CAsyncSocket的回調(diào)運行在 MFC 的異步通知線程里直接在這些回調(diào)里操作控件輕則界面卡頓重繪異常重則彈斷言。穩(wěn)妥做法是把數(shù)據(jù)打包用PostMessage投遞到主線程。// ClientSocket.cpp void CClientSocket::Dispatch(UINT16 type, const void* body, int len) { // 堆上分配接收方負責(zé) delete避免跨線程共享 CString CString* pMsg new CString((LPCSTR)body, len); switch (type) { case MSG_TEXT: m_pDlg-PostMessage(WM_PEER_TEXT, (WPARAM)pMsg, (LPARAM)m_hSocket); break; case MSG_HEART: m_pDlg-PostMessage(WM_PEER_HEART, (WPARAM)m_hSocket, 0); delete pMsg; // 心跳不帶內(nèi)容立刻回收 break; default: delete pMsg; break; } } // ServerDlg.cpp —— 主線程處理 LRESULT CServerDlg::OnPeerText(WPARAM wParam, LPARAM lParam) { CString* pMsg reinterpret_castCString*(wParam); AppendLog(_T([%u] %s), (unsigned)lParam, *pMsg); delete pMsg; // 誰接收誰釋放 return 0; }堆對象是必須的PostMessage是異步的如果用棧對象地址消息還沒被處理函數(shù)地址就失效了。同理不能直接傳CString引用。約定好“接收方負責(zé) delete”代碼里每一處都照做就不會漏。CString這里按LPCSTR構(gòu)造意味著協(xié)議體按 ANSI 處理。如果客戶端要發(fā)中文又不想踩編碼坑統(tǒng)一改成 UTF-8發(fā)送端把CStringW轉(zhuǎn) UTF-8 字節(jié)流接收端用MultiByteToWideChar轉(zhuǎn)回來再顯示兩端一致就行最怕的是一端用CStringA一端用CStringW。5. 避坑與排查MFC Socket 最容易出問題的四個位置這一節(jié)的現(xiàn)象都是我在調(diào)試這套結(jié)構(gòu)時真實撞過的順序按“從啟動到退出”排。5.1 連接建立階段的坑現(xiàn)象一點了“連接”客戶端界面直接卡死幾秒然后提示超時。原因在 UI 線程里用了CSocket的阻塞式Connect或者用CAsyncSocket::Connect之后立刻彈了個模態(tài)框。前者會把消息循環(huán)堵死后者會讓OnConnect永遠進不來——CAsyncSocket的事件是靠窗口消息驅(qū)動的模態(tài)對話框自己跑了一套消息循環(huán)異步通知被吞掉了。解決連接動作只調(diào)Connect立即返回結(jié)果全在OnConnect里處理用nErrorCode判斷成功與否。非要在等待期間給用戶反饋用非模態(tài)對話框或者直接置灰按鈕加一句“連接中”。超時交給系統(tǒng)Connect本身有內(nèi)核級超時想要更短就自己起個定時器超時后Close掉重來。現(xiàn)象二服務(wù)端顯示監(jiān)聽成功客戶端就是連不上錯誤碼 10061。原因Windows 防火墻攔了。第一次運行編出來的 exe系統(tǒng)會彈一個“是否允許訪問網(wǎng)絡(luò)”的框如果當時點了取消之后這個程序的所有入站連接都會被靜默丟棄而且不會再彈第二次。解決到防火墻的“允許應(yīng)用通過”里把這個 exe 勾上或者調(diào)試期間臨時關(guān)掉專用網(wǎng)絡(luò)的防火墻。順帶一個經(jīng)驗調(diào)試時用 127.0.0.1 先確認邏輯通不通再換局域網(wǎng) IP 測能把“防火墻問題”和“代碼問題”分開。綁定地址用INADDR_ANY而不是127.0.0.1后者只接受本機連接別的機器連過來會被拒。5.2 收發(fā)階段的坑現(xiàn)象三中文消息收到一半是亂碼或者最后幾個字變成方塊。原因發(fā)送端按CString的GetLength()算字節(jié)數(shù)接收端按字節(jié)構(gòu)造CString。CString在 Unicode 工程里是寬字符GetLength()返回的是字符數(shù)一個漢字算 1占內(nèi)存卻是 2 字節(jié)長度對不上。另一個常見原因是直接用strlen算 UTF-8 字符串長度遇到中文也會偏。解決協(xié)議體一律按字節(jié)流處理。發(fā)送前明確轉(zhuǎn)成std::string或者CByteArray長度取字節(jié)數(shù)接收端用MultiByteToWideChar(CP_UTF8, ...)轉(zhuǎn)回寬字符再顯示。兩端的編碼約定寫進Protocol.h的注釋里誰改誰負責(zé)?,F(xiàn)象四客戶端發(fā) 10 條消息服務(wù)端日志里只有 3 條內(nèi)容還是拼接的。原因OnReceive只調(diào)了一次Receive剩下的字節(jié)留在內(nèi)核緩沖區(qū)等下次事件而客戶端是連續(xù)Send的短時間內(nèi)不會再觸發(fā)新事件數(shù)據(jù)就一直卡著。另一種情況是切包邏輯里RemoveHead的長度算錯把下一包的頭也吃掉了。解決按 4.2 的寫法Receive循環(huán)到WSAEWOULDBLOCK為止切包時嚴格用sizeof(PacketHeader) ntohl(length)作為消費長度別憑感覺寫常量。調(diào)試期在ParseBuffer里加一行日志打印緩沖區(qū)當前長度和切出來的包長跑十幾條消息就能看出規(guī)律。5.3 關(guān)閉和退出階段的坑現(xiàn)象五關(guān)掉客戶端之后服務(wù)端再啟動就報端口被占用10048。原因TIME_WAIT狀態(tài)主動關(guān)閉的一方會在這個狀態(tài)停留幾十秒。調(diào)試時反復(fù)啟停端口就一直被上一個進程占著。解決監(jiān)聽前給 socket 設(shè)SO_REUSEADDRMFC 里用SetSockOpt// ListenSocket.cpp —— 在 Create 之前或之后都可以但必須在 Listen 之前 int opt 1; m_pListen-SetSockOpt(SO_REUSEADDR, opt, sizeof(opt), SOL_SOCKET);注意SO_REUSEADDR只是讓綁定不被TIME_WAIT擋住不是讓兩個進程同時監(jiān)聽同一端口。真正同時監(jiān)聽要靠SO_REUSEPORTWindows 上的語義和 Linux 不一致跨平臺項目別指望它。另外退出時記得按“先Close所有連接再Close監(jiān)聽最后讓CWinApp正常返回”的順序收尾。漏掉某一步的表現(xiàn)是進程在任務(wù)管理器里掛著不退下一次調(diào)試端口還是占著。6. 二次開發(fā)把它改成一個真能干活的工具這套骨架跑通之后改造成本主要花在三個地方按投入產(chǎn)出比排。第一是加心跳和超時踢人。協(xié)議里已經(jīng)留了MSG_HEART服務(wù)端維護一個mapSOCKET, time_t起一個SetTimer每 30 秒掃一遍超過 90 秒沒更新的連接直接Close并從在線列表移除。沒有這一步客戶端拔網(wǎng)線、進程被強殺這類情況服務(wù)端完全感知不到在線列表會一直掛著一堆僵尸連接廣播時還要往死連接上寫。第二是把廣播做對。別在 UI 線程里循環(huán)調(diào)SendPacket客戶端一多界面就卡。做法是給每個CClientSocket掛一個std::dequeCByteArray發(fā)送隊列UI 線程只負責(zé)push真正的Send放在各自的OnSend回調(diào)里推進寫不動了就停等下一次可寫事件繼續(xù)。這個改造大概幾十行但決定了這套東西能帶 5 個客戶端還是 50 個。第三是換成二進制協(xié)議。現(xiàn)在包體是文本解析靠字符串字段一多就難維護。把MSG_LOGIN的包體定義成struct同樣#pragma pack(push, 1)讀寫時逐字段memcpy配合包頭里的type做分發(fā)擴展新消息只要在Protocol.h里加一個枚舉值和一個結(jié)構(gòu)體。改造點改動位置大致工作量解決的問題心跳超時CServerDlg 定時器半天僵尸連接、在線狀態(tài)不準發(fā)送隊列CClientSocket一天UI 卡頓、大廣播丟包二進制協(xié)議Protocol.h ParseBuffer一天字段擴展、解析性能驗證方法上我會準備兩個客戶端實例再加一個用腳本寫的假客戶端。腳本那邊故意一次只發(fā) 3 個字節(jié)把包頭拆成兩批送專門驗證半包處理再故意連上不登錄驗證服務(wù)端的超時邏輯最后用taskkill強殺客戶端看服務(wù)端多久能從在線列表里把它清掉。這三種病態(tài)輸入跑過一遍基本就敢往設(shè)備上掛了。從那以后我每次寫這類帶網(wǎng)絡(luò)的小工具都會先把“發(fā)包不完整、收包不完整、連接突然消失”這三件事的日志打點加進第一版而不是等出問題了再回來補。調(diào)試網(wǎng)絡(luò)問題最貴的是信息日志里多一行緩沖區(qū)長度可能省掉一整晚。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
熟妇人妻中文字幕无码老熟妇| 九九热最新地址| 综合精品99| 啊v视频在线观看| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 99视频精品在线| 狠狠色婷婷在线| 韩国97天堂| 99re思思热久久| 婷婷五月天亚洲综合网| 综合久色五月| 99热思思在线观看| 另类图片激情五月天| 99热线观看9| 亚洲精品国产A久久久久久| 日韩aaaaa| 色婷激情网| 激情五月天综合网| 色九月婷婷综合| www九九免费视频| 99热老网站| 欧美黄色AA片哗啦啦啦| 婷婷色综合| 日夜夜天天| 五月丁香六月婷婷精品| www色婷婷久久综合久色| 欧美色偷拍| 黄色短视频在线观看| 99热精品在线在线| 可以免费观看的av| 欧美性猛交99久久久久99按摩 | 日本无va视频| 婷婷丁香久久五月综合| 六月丁香五月激情网| 欧美99热| 2025中文在线视频字幕免费观看| 狠狠色性| 99亚洲色色| 26uuu亚洲色| 丁香婷婷人妻| 婷婷中文字幕版| 性色欲情 网站| 91视频一起草| 99热99思午夜精品| 久久婷婷在线| 超碰二区| 中文成人在线| 怡红院成人AV| 99久久婷婷国产综合| 97人妻碰碰碰久久香蕉| 亚洲性受XXXX五月丁香| 亭亭五月激情亚洲在线| 亚洲欧美丁香五月天亚洲欧美| 欧美国产一区二区三区| 五月婷亚洲精品AV天堂| JAPANRCEP老熟妇乱子伦视频 | 4399在线日本A片| 久久五月情| 99碰碰中文| 亚洲成片在线观看| 久久精品爱爱| 天天日日爽| 天天透天天爱| 天天做天天爱| 超碰不卡在线| 热的国产,热的综合,热的有码 | 日本九九热| 丁香六月亚洲综合| 五月综合激情| 91九色偷拍| 9色在线视频精品观看| 91久久电影| 99爽视频| 天天爽天天做| 丁香五月影院| www综合久久| 五月天无码| 婷婷丁香人妻| 久久婷婷五月天懂色| 五月丁香777| 久久综合婷婷激情| 九月丁香| 成人五月天视频| 啪啪一区| 偷偷操99| 99免费视频在线观看爱| 久久婷五月| 狠狠色婷| 五月社区婷婷激情| 五月婷色色| av在线播放网站| 国产九九一区二区三区| 狠狠插狠狠| 色婷婷五月综合在线| 九九热最新| a性生活久久无| 六月大香蕉| 色五月婷婷天天干| 婷婷六月色开| 久综合| 2025中文在线视频字幕免费观看| 婷婷99中文字幕| 另类小说五月天| 9超碰在线| 精品九九在线观看视频| 久久婷.com| 超碰9799| 五月丁香婷婷久久| 久久草大香蕉| 伊人五月婷婷| 五月丁香六月婷婷网| 182.t午在线观看| 丁香五月天在线视频| 天天摸天天做天天爱天天爽| 久久男人网婷婷| 精热在线综合网| 久久99热这里只有精品| 婷婷五月天综合久久日| 亚洲AV成人无码久久精品老人法拉利| 最近中文字幕2019视频1| 九九激情视频| 福利视频在线播放| 夜夜操夜夜爽| 国外亚洲成AV人片在线观看| 99热精品在线播放观看| 日本一级一级一级一级| 97丁香花五月天激情小说| 十一月婷婷激情四射| www.ywav| 日日狠狠久久偷偷四色综合免费| 无码成人播放器| 五月天日日操夜夜操| 九九热re99re6在线精品| 丁香五月之久操视频| 婷婷五月天 偷拍| 热久久91| 五月色亭丁香| 最新亚洲色色网| 色久九| 老师把我爽高潮了免费A片| 亚洲综合丁香婷婷六月天| 这里只有精品视频在线| 色色色在线播放| 五月香婷婷| 欧美婷婷日本| 色婷五月天| av中文在线| 丁香五月性| 天天操B| 久久精品9| 91碰| 99久久国产宗和精品1上映| 五月开心婷婷极品激情| 思思久久99热只有频精品66| 久久精品视频9| 激情综合五月丁香六月婷婷| 狠狠草在线观看| 丁香五月婷婷影院| 九九黄色网| 91色五月| tingtingzonghewang| 精品亚洲国产成AV人片传媒| 天天爽综合网| 婷婷内射视频在线| 青草视频在线观看视频| 开心激情网在线| 婷婷五月激情综合啪啪| 涩五月婷婷| 五月天激情国产综合婷婷婷就去爱| 99久久久久| 久久精品性爱视频,| 性做爰1一7伦| 婷婷久月| 色色色视频免费无码| 欧美日韩欧美| 熟女激情五月天 | 婷婷五月精品中文字幕| 日本女va| 免费啪啪啪网站 | 国产精品99久久久久久久女警| 亚洲天堂亚洲色色色| 丁香情色五月| 超碰91人人操| 5月丁香六月婷婷| www.91AV.COM| 午夜少妇在线观看视频| 久久久27操| 九九热视频精品2| 久久五月天激情| 婷婷九月丁香| 亚洲九九九九| 婷婷五月亚洲综合| 色色婷婷婷丁香五月天| 国产AV一区二区三区最新精品| 国产五月天欧美色| 啪啪干伊人婷婷| 丁香五月 无码| 亚洲综合五月天婷婷丁香| 九九热视频首页/这里只有精品| av大片在线| 六月激情综合| 天天干、天天日日| 日本va欧美va精品发布视频| aa久久| 激情五月天婷婷播播久久综合91| 日韩无码专区| 七七色色综合| 天天草天天摸| 狠狠色噜噜狠狠| 丁香五月天啪啪| 色婷婷无吗| 狠狠干在线| 婷婷五月天小说网| 五月天婷婷激情春色小说| 91男同| 性爱网五月婷婷| 激情婷婷| 日本久久99| 五月婷婷在线播放| 六月婷婷九月丁香亚洲综合| 五月激情婷婷播播网| 欧美视频五区| 超碰二区| 色综合久久44| 九九热精品6| 开心六月婷| 欧美操逼天堂| 69精品人人人人人人| 欧美性猛交AAAA片黑人 | 99这里有精品视频| www久久久久久久97| 国产VA亚洲VA96| 伊人丁香五月天丁香在线婷| 国自产拍偷拍精品啪啪一区二区| 99久视频| 免费无码毛片一区二区A片| 中文字幕综合网| 天堂久热| 综合久色五月| 亚洲视频在线观看99| 五月婷婷亚洲| 五月天社区| 五月天久久婷婷婷| 日韩99视频| 亚洲色啪| 一本色道久久综合狠狠躁小说| 噜噜噜噜噜在线| 97操女视频| 五月天激情丁香| 精品人妻久久久久久| 天天更新天天亚洲| 深爱五月婷婷开心中文字幕| 久热中文字幕| 国产婷婷五月天| 玖玖99婷婷| 五月激情六月综合| 亚韩在线视频| 婷婷中文无码| 91精品国产色猫| 被强行糟蹋的女人A片| 97婷婷狠狠| 五月天综合在线观看| 亚洲亚洲激情| 亚洲色婷婷色| 99热在线里有精品| 青青操avbb| 九色91国产| 婷婷玖玖丁香| 人妖色AV色综合| 青青久久五月| 日本色99网站| 五月激情婷婷偷拍| 亲子乱AV-区二区三区| 国产精自产拍久久久久久蜜| 国产精品久久久久久久久久免费 | 97久久精品| www99精品亚| 97啪在线观看视频| 丁香狠狠色婷婷久久无码视频| 欧美肉大捧一进一出免费视频| 久9视频| 婷婷激情综合| 手机旧版看人妻1025| 免费在线观看欧美激情xx小视频| 色久天| 婷婷日日夜夜| 久热免费| caop在线| 啪啪婷婷五月天激情| 国产成人+综合亚洲+天堂| 久久婷婷激情四射五月天| 激情五月天情色| 91色性感五月婷婷丁香| 色综合久久8| 亚洲无码免费看| 91在线看片| 9久热视频| 天堂呦 呦百度搜索-百度搜索| 无码一区精品一区视频| 婷婷字幕在线| 五月停停色| 99爱爱网| www.五月天婷婷.com| 午夜丁香婷婷| 天天做天天要天天爽| 人妻videos人妻高清| 五月丁香六月色婷婷| 婷婷成人丁香色情基地30| 天天干天天干天天干天天干天天干天天| 丁香五月婷婷色五月| 丁香亚洲婷婷五月| 久色资源网| 丁香五月天激情免费在线观看AV777 | 免费看片操逼| 91狠狠综合久久| 久鲁鲁色网| 狠狠色丁香99| 五月婷婷五月丁香| 性爱综合网| 99综合视频一体| 天天肏在线| 在线成人va| 色天堂操| 99色啊| 国色天香伊人狠狠色| se色综合网| 色五月婷婷91| 五月婷婷色男女| 狠狠狠狠狠草| 变态另类9| 成人片在线播放| 狠狠噪| 五月丁香婷婷啪啪综合| 激情深愛五月視頻| 韩国激情五月天综合网| 五月婷婷成人| 丁香六月激情国产| 美女五月激情| 婷婷网五月天| 超碰99在线| 嘿嘿视频免费看9| 伊人婷婷大香蕉| 九九热再线九九视频免费在线观看| 色色色欧美色色| 日本狠狠干| 五月婷婷激情五月| 91丨九色丨老农村| 五月丁香综合久久| 九月婷婷久久| 色色综合五月| 亚洲丁香五月美女| 日韩999| 日韩乱轮AV| 日本97在线视频| 五月丁香婷婷婷婷综合网| 婷婷丁香五月网| 色婷婷五月天| 激情性爱五月天| 五月天色视频| 99热在线中文字幕| 亭亭色色五月天| 色爱爱综合网| 丁香五月婷婷成人色区| 色色综合网站| 97色色综合| 亚洲mm色| 99爱爱| 午夜av网| 开心五月综合| 国产精品涩涩涩视频网站| 台湾无码A片一区二区| 五月亭亭六月激情| 超碰九色| 五月婷婷综合激情网| 79精品视频| 最近免费中文字幕大全高清大全1| 殴美日韩成人| 99热在线精品观看| 中文字幕人妻一区二区| 日韩六十路91性交电影| 久久婷色| 亚洲婷婷五月天在线激情综合网| 玖玖爱综合网| 婷婷激情人妻| 六月丁香激情| 天天肏天天肏| 激情五月婷婷网| 1024亚洲无码| 色综合五月婷婷狠狠干| 天天做天天爱天天爽| 亚洲精品国产成人AV在线| 五月激情六月综合| 中文字幕五月久久婷婷| 九九99在线视频| 五月婷色丁香| 极品人妻VIDEOSSS人妻| 婷婷色天香| 人人操五月天| 亚洲性天天| 碰碰91| 色综合九九色综合88| 思思热视频| 久久久久97| 婷婷丁香亚洲五月天| 亚洲色五月| 五月天色婷婷激情综合| 亭亭五月丁香五月天激情| 九九这里是免费的视频5| 亚洲精品婷婷| 色私五月婷婷| 91碰碰碰| 丁香丁香激情网| 六月婷婷激情| 婷婷五月天少妇| 熟女人妻一区二区三区免费看| 综合激情五月丁香9999久久精| 久久婷婷五月| 一本久久亚洲五月婷婷| 色色五月婷婷狠狠| 五月亭亭性| 狠狠久久婷婷| 日韩999| 国产激情久久久| 九九热视频精品| 久久色在线视频| 天天插天天插| 这里只有精彩视| 97久久精品视频| 色色色色综合| www99热| 欧美成性色| 综合婷婷| 天天色域综合网| 综合九九日本| 五月丁香色| 五月婷伊人| 婷婷99视频全集高清| 26uuu欧美宗合| 六月激情网| 色婷婷综合久久久久| 天天做天天爱天天搞| 婷婷久久五月天| 能看的AV网站| 九九99热| 99热思思| 五月天婷婷在线播放| 九九热精品99| 成人无码精品1区2区3区免费看| 99色播| 丁香五月 激情文学| 久久久91| 思思99re这里只有| 色欲九区| 中日韩美欧成人一区二区精品在线| 五月激情婷婷六月| 人妻性操逼中文字幕 国产| 色偷偷AV亚洲男人的天堂| 欧美成人五月天| 99热亚洲| www.com久久久久久久久久久久久久久久久| 亚洲综合色色| 婷婷五月天改成什么了| 青青草五月天| 人妻内射一区二区在线视频| 婷婷色片| 久久久久99精品成人片| 六月婷婷开心| 日日日天天干| 精品国产va久久久久| 婷婷福利影院| 丁香六月婷婷| 九九在线视频| 天天操,天天插| 9热在线观看| 五月丁香六月激情| 色婷婷中文在线| 狠狠狠激情网| 五月丁香婷婷色色| 91精品综合久久久久久五月天| wwwss在线观看| 色婷婷视频综合| 色婷婷电影| 婷婷激情五月天激情小说| 精品久久艹| 婷婷色五月色| 激情丁香淫荡婷婷| 日本三级黄色大片| 大香蕉七区| 538在线精品| 大香蕉欧美在线| 婷婷六月中文字幕| 99久久99视频只有精品| 亚洲一区国产传媒| 先锋男人91资源| 欧美叉叉叉BBB网站| 婷婷激情性爱| 激情五月天视频| 色情五月天婷婷| 天天摸.天天mo| 久婷婷五月综合欧美| 成人龟情网丁香五月| 色播五月婷婷| 久久久久久激情| 五月激情婷婷国产精品久久久久久| 丁香深五月婷婷| 五月婷婷五月天| 99啪| 丁香狠狠色婷婷| 久久婷婷五月免费视频| 999影院成人在线影院| 丁香五月天天日| jiqingtaose五月天| 1024成人在线观看| 丁香婷婷婷五月综合色情| 天天日色情| 性生生活大片又黄又| 五月丁香综合网| 99热自拍| 99人人干| www.婷婷五月| 丁香五月天激情综合| 91干视频| 九九激情综合| 青草激情综合| 26uuu| 大香蕉久久| 欧洲一区二区| 婷婷五月激情欧美| 婷婷精品在线| 99热这里只有精品1| 九九综合九九| 九九婷婷网五月天| 97福利视频| 五月丁香综合| 亚洲妇女熟BBW| 亚洲精品无AMM毛片| 97精品人人A片免费看| 狠狠干,狠狠操| 最近中文字幕在线中文视频| 欧美日本韩国亚洲| 久久久久久久久18久久| 69精品无码一区二区三区| 另类国产欧美视频| 99热国产婷婷| 久久婷婷伊人| 伊人五月婷婷| 久热中文字幕在线线观看| 五月天婷爱综合| 激情五月亚洲| 五月丁香色综合| 久久婷婷色| 亚洲天堂色色| 99视频| 国产色色色色色| 亚洲国产网站| 色五月综合激情| 婷婷色色狠狠| 五月色丁香激情| 色婷婷狠狠干芒果TV| 色五月中文网| 99性色| 疯狂做受XXXX高潮A片| 99精品视频播放| www.九九婷婷| 色综合色色| 久久黄色免费视频| 婷婷丁香五月综合网上 | 夜夜撸日日操| 欧美在线干| 婷婷无五月无码视频| 毛片九九九九九九| 99久久综合网| 五月婷婷无码专区| AV成人在线播放| 六月丁香网| 欧美97超碰| 先锋资源91| 99这里有精品免费| AV性爱在线| 夜夜干 夜夜操| 97超级碰人人| www.婷婷| 夜夜操,天天撸| 91精品婷婷国产综合久久| 婷婷亚洲综合| 五月天另类图片区99| ri电影在线| 五月天婷婷在线观看| 人人爱操| 热久久婷婷| 丁香五月婷婷狠狠色| 色狠狠色狠狠| 一级性爱视频| Aα在线免费观看| 丁香六月婷婷综合激情欧美| 色导航色婷婷五月天在线观看| 日日.c| 淫视馆av三区| 涩涩五月天综合| www.99热这里精品| 亚洲字幕AV一区二区三区四区 | 丁香五月香蕉| 99精品视频在线观看| 成人网丁香五月| 狠狠肏综合网| 激情综合久久| Www.狠狠| 亚洲婷婷成人五月天| 依人大香蕉| 日本欧美999久久久三级片| 五月丁香六月婷婷啪啪综合| 这里只有精品视频| 亚洲AV成人无码精品| 天天插天天玩天天干| 五月亭亭性| 色五月激情五月| 九九伊人网| 人人摸人人| 99丁香五月| 天天插天天插天天日| 婷婷五月天天天| aV直接看| 五月婷婷六月爱| 九九碰九九爱97| 五月亭亭欧美女人| 国语精品探花| 五月丁香六月片| 婷婷基地成人五月天| 影音先锋一区二区三区| 天堂爱啪啪| 婷婷丁香人妻天天| 9热超碰| 天天婷婷操| 婷婷激情小说| 久久亚洲婷婷| 99色婷婷| 99re久久| 大香蕉久久| 婷婷在线综合| 91九色国产在线| 97热九九| 狠狠色大香蕉| 97碰碰在线观看视频| 九九99一区| 婷婷五月丁香国产| 这里只有精彩视| 蜜乳av一级av| 久久 这里只有精品1| 国外亚洲成AV人片在线观看| 九九视频精品这里只有| 91精品综合久久久久久五月丁香| 狠狠看狠狠| 五月婷婷啪啪| 亚洲天堂亚洲色色色| 97色色网| 丁香五月老师| 97日本在线播放| 5月丁香六月婷婷| 97色射| 日日夜夜狠狠干| 色情激情五月婷婷| 色综合天天综合成人网| 日日操夜夜操无码免费| 99噜噜| 丁香九月婷婷综合| 色五月av| 天天综合色综合| 六月婷综合| 天天综合网网欲色| 日韩欧美老妇性视频91久久久| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 婷婷久久五月天丁香| 久久五月激情| 超碰免费在线| 伊人深爱综合| 97久久五月丁香婷婷| 色久女| 婷婷五月天成人导航| 婷婷综合五月天| 先锋av性爱成人电影| 五月色丁香婷婷综合| 人人摸人人澡人人| 色 免费网站视频| 天天日天天操心| 激情五月天小说视频| 久久五月天丁香花| 五月丁香免费视频| 五月丁香少妇网| 色综合女人99| 婷婷五月天综合久久| 99亚色色色| 国产内射婷婷| 97超碰在线免费观看| 人妻性爱av网站| 久久久宗合视频88| 久久婷婷成人| 99热精品一区| 六月丁香中文字幕| 蜜桃成语时李时珍 免费| 视频色色色色色色| 1024日韩| 久久婷婷五月综合色和| 日日干天天射| 色婷婷丁香中文在线播放| 色婷婷AⅤ| 色五月婷婷网| 天天干夜夜谢| 国产色色网址网站| 九九人人看| 99热自拍| 五月综合色| 婷婷综合五月天激情| 91se在线观看| 青青草国产亚洲精品久久| 日本色综合| 26uuu淫色| av线电影| 天海翼中文字幕高| 久久五月视频| 五月天激情亚洲| 99在线精品视频观看免费下载| 亚洲精品另类| 少妇大叫太大太粗太爽了A片| 九九热精品视频| 六月婷婷色五月| 五月婷婷综合久久| 五月丁香 狠狠爱| 大香蕉综合| 五月天天久久香| 丁香婷五月| 丁香色五月 97干| 久青草大香蕉| 人人色人人弄人人操| 99操视频| 五月天六月色| 五月天婷婷青青草| 99热在线里有精品| 久热婷婷| 99九九视频| 五月天另类小说久久小说网| www.狠狠操| 91色在线/日韩| 色婷婷视频在线| 日日射天天射| www色婷婷久久综合久色 | 色色日韩| 色狠狠色| 五月 成人 婷婷| 狠狠 久久| 久久曰9| 亚洲日韩乱码一区二区三区四区 | 色色色在线观看| 中文字幕无码成人电影| 色色网站毛片| 大战熟女丰满人妻AV| 五月丁香免费看| 久久久ww| 天天操天天插| 久久婷婷五月综合| 99精品性爱| 五月婷婷六月丁香在线视频| 日日狠夜夜狠| 丁香婷婷啪啪啪| 五月丁香婷婷国产精品综合| 99热99ai| 色色色色色色色综合| 欧美情月伍月天| 婷婷九月丁香| 日日干天天| 在线观看免费观看在线9久| 色播五月网| 97人人超| 婷婷九月| 亚洲这里只有精品| 九九無妻| 美日韩成人| 丁香五月大香蕉| 99热66| 熟女人妻一区二区三区免费看| 色噜噜狠狠色综无码久久合欧美| 五月婷在线观看| 26uuu在线观看| 五月婷在线观看| 婷色五月天| 综合热无码| 插插五月天| 五月婷六月丁| 激情小说视频图片网| 十月色综合| 开心婷婷五月| 國語久久婷| 97 A I色色| 久久久婷| 丁香婷婷老熟女综合网| 亚洲成人av中文| 俺去婷婷 丁香| 玖玖五月丁香| 97在线精品视频| 99色激| 狠狠色性| 中文国产五月天| 天天骑天天操| 久久精品视频99| 激情深爱五月天| 无码免费人妻A片AAA毛片西瓜| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 色五月激情五月| 精品99在线| 婷婷五月激情丁香| 粉嫩AV久久一区二区三区| 国产视频色色色色色色色| AV操一操| 日日爽日日| 亚洲乱码日产精品BD| BlACKEDRAW视频一区二区| 丁香五月婷婷色偷偷| 日韩无码专区| 6080av| 九九99久久| 直接看的av| 日本黄色一级| 97色啪| 77799热| 99热国产这里只有精品| 99热最新| 5月丁香美女影院| 午夜婷婷久久| 五月丁香六月婷婷在线小说视频| 婷婷五月视屏| 天天日夜夜爽| 人妻Av在线| 超碰人人在线| 99热这里只有精品官网| 色婷婷97| 激情操逼婷婷| 亚洲AV日韩无码| 五月天色婷婷av| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 五月婷婷我| 亚洲超碰在线| 色综合网页| 五月天婷婷基地| 久久欧洲综合网| 色啪网| 啪啪视频99| 777色婷婷爱五月| 99A片| 天天日日夜夜| 任你擦免费视频| 五月婷婷影视| 97九色| 色婷婷久久9.com| 久这里只有精品99| 5五月综合网亚洲| 国精产品一区一区三区免费视频 | 色激情五月| 亚洲色就是色色色| 91超级碰碰碰| 久色视频| 激情操逼婷婷| 99精品视频免费在线播放| 这里只有精品1| 国产精品久久久久久久久久免费| 91精品婷婷国产综合| 亚洲综合五月天综合| 狠狠综合久久| 久久婷婷激情四射五月天| 天天天天天操| 开心激情五月天网| 久久在线92| 天天插AV丝袜中| 高清一区二区三区日本久| 日韩久久视频| 亚洲美女网Va| 超碰97在线观看免费| 爱之国产色情综合| AAA久久| 九九激情视频| 99av视频| 五月丁香婷婷钟和色图| 99热在线99| 色情丁香五月婷婷精品| 五月婷综合激情| 五月WWW| 免费视频WWW在线观看网站| 九九热a| 91色在线/日韩| 超级碰碰碰91| 日韩视频99| 亞洲自怕| www开心激情网| 国产乱妇乱子在线播视频播放网站 | 综合婷婷| 狠狠香蕉| 欧洲亚洲午夜| 中文字幕av在线播放| 亚洲 欧洲 国产 伦综合| 久8色色| 久久五月天激情| www 五月天 com| 亚洲精品又粗又大又爽A片 | 色综合天天综合成人网| 中文字幕在线免费观看视频| 久99久在线观看| 1024操逼视频| 99re在线视频| 六月色播| 激情久久综合| 国产在线黄色| 天天射美女| 丁香六月激情四射| 9热视频在线观看| 婷婷激情六月综合| 色婷婷中文在线| 色伊人婷婷| 91久热| 欧美va精品va老师va| 开心激情站| 久久激情综合| 欧美成人AAA片一区国产精品| 丁香婷婷少妇| 色婷婷性爱网| 五月婷婷开心综合| 丁香六月激情毛片| 激情综合色图| 五月丁香色情| 99性爱| 色情一区二区播放| 国产免费av网站| 色五月婷婷五月天| 五月婷婷久久综合| 久久五月天婷婷| 婷婷五月天深爱| 久久久久久久久月丁| 婷婷五月成人系列| 久久久27操| 99热超碰| 丁香五月色综合色播五月| 狠狠色噜噜狠| 亚洲丁香五月天视频| 无码区婷婷五月花开| 亚洲丁香花色| 五月丁香六月婷婷在线小说视频| 九色综合网| 亚洲综合99| 97香蕉碰碰人妻国产欧美| 色情五月综合婷婷| 这里只有国产精品在线| 日韩美一级毛卡片| 超碰91人人操| 五月天色婷婷av| 色色综合热| 丁香五月欧美成人| 丁六月激情| 综合久久首页| 亚洲色五月| 六月婷婷影院| 色九月欧美| 婷婷丁香久久| 五月情婷婷| 丁香六月婷婷| 婷婷五月天 丁香五月天 裸体| 五月婷婷婷丁香播| 丁香五月在线伊人| 99国产97在线,| 大香蕉520| 一区二区三区四区无码| 五月婷婷七月丁香| 九九热精品视频在线观看| 天天日天天干天天天| 成人 在线 日韩| 精品9197碰| 久大香蕉| 五月天婷婷黄色| 日本久热| 67194线路二在线观看| 黄网免费观看| 91国产精品视频播放| 中文字幕av在线播放| 亚洲avjiujiur91| 中文字幕婷婷在线| 丁香六月激情综合| 日本色色网站| 激情五月色综合国产精品| 4399在线观看免费高清黄色视频| 五月天婷婷综合| 1024操逼视频| 欧美激情2025| WWW.天天日| 五月伊人婷婷999| 国产99久久久国产精品免费看| 天天干夜晚夜操| 亚洲狠狠婷婷综合久久久| 影视av久久久噜噜噜噜噜三级| aV直接看| 久久久久9| 六月激情综合| 婷婷涩五月天综合| 99精品在线观看| 亚洲精品444久久久久久| 亚洲精品无码一区二区| www.91.com黄| 五月婷婷免费在线观看视频| 国产精品噜噜在线视频| 国产1区2区3区| 久久五月天 91| 狠狠精品干练久久久无码中文字幕| 激情綜合網址| 婷婷丁香五月综合激情视频| 99热99思午夜精品| 成人在线网址| AV成人在线播放| 9色在线视频精品观看| 爱久久小说下载网| 开心五月天激情网| 综合另类视频| 婷婷五月免费视频| 五月天激情视频网站| 婷婷五月天少妇| 丁香婷婷五月天校园春色| 成人一级片| 在线超碰91| wwww.色婷婷| 欧美综合五月天婷婷tin| 六月丁香网| 久久性爱视频网站| 日本啪啪网| 99热这里只有精品9| 色狠狠综合入口| 噜噜噜精品欧美成人在线观看| 第四色五月激情网| 丁香五月天天哦| 99久久婷婷| 九九九热精品| 色综合久久88色综合天天99| 99人人操人人操人人精| 色婷婷最新域名 | 国产综合婷婷| 超碰高清在线| 色色色色区| 欧美婷婷九月| 五月天久草| 色情五月天导航| 五月丁香花激情啪啪网| 91碰免费视频| 99色在线观看视频者| 熟女强人妻一区二区三区四区无| 无码人妻丰满熟妇奶水区码| 欧美性生交XXXXX无码小说| 大地资源色婷婷视频在线| 另类在线| 夜夜爽77777妓女免费下载| 思思久久99热只有频精品66| 国产精品久久久久久久久久久久| 欧美交换配乱吟粗大25P| 国精产品一区一区三区免费视频 | 婷婷六月丁香激情综合| 国产精品色情AAAAA片软件| 精品一二三区久久AAA片| 开心五月深爱五月| 日本精品人妻无码77777| www五月婷婷88导航| 黄色高清无码| 久草嫩草在线观看| 香蕉大综综综合久久| 日本97在线视频| 51XX午夜影福利| 大香蕉婷婷| 亚洲激情高潮| 六月狠狠综合| 亚洲另类日本| av在线观看网站| 久热这里只有精品6| 538在线精品| 五婷婷综合网| 性爱网六月丁香| 欧美日本黄色| 国产片天天爽夜夜爽| 中文字幕+乱码+中文字幕在线观看| WWW.桔色成人.COM入口| 天天干天天操天天爱| 丁香五月天在线观看| 色婷婷天堂| 日本五月婷婷| www.超碰97| 久久婷婷的综合色丁香五月| 色综合九九色综合88| 亚洲激情丁香五月天色| 日逼免费视频 | 丁香六月婷婷色XXXXX| 69精品人人人人人人人人人| 大香蕉视频99| 五月天婷婷香蕉狠狠超碰综合| 91婷婷丁香五月天免费视频网站| 丁香成人综合| 青草五月天| 成人看片网站| 91919191919久久成人视频| 色色色色色色色色色色色色色五月天 | 久久99热这里只有精品| 强辱丰满人妻HD中文字幕| 综合 蜜月 婷婷| 丁香婷婷大香蕉| 5月婷婷性视频| 99热这里都是精品| 九九色色| 97干在线看| 九九sese| 夜夜干夜夜操| 五月婷婷综合网| 久久久久九九九九视屏小说88| 超碰在线视屏| 色高清无码视频| 久操福利| 久久艹 五月天| 激情爱爱网站超大免费| 深爱开心激情网| 婷婷狠狠18禁久久| 成人国产欧美大片一区| www.99日本| www.狠狠操.com| 亚洲精品在线视频| 97在线观看| 久操大| 色综合久久88色综合天天| 婷婷大香蕉| 国产婷婷久久| 99高级会所久久| 天天综合色| 超碰在线免费观看日韩| 99自拍视频网站| 丁香五月激情鲁| 丁香婷婷色五月激情综合| 91主播在线| 激情六月五月婷婷综合网| 日日干夜夜干| 91人妻九色大屁股| 五月婷婷六月丁香免费| 丁香婷婷影院| 在线看的免费网站| 激情文学久久| 色播五月婷婷| 婷婷五月婷婷五月| 婷婷五月天成人导航| 天天天干夜夜夜操| 精品久久穴| 婷婷久久五月| 五月婷婷官网色| 欧美私人家庭影院| 日本欧美在线| 色五月激情网| 九九精品9| 国产永久一二一起草| 色婷婷9| H亚洲| 色五月婷婷、老熟女| 狠狠干综合| 五月婷婷综合影院| 这里只有精彩视| 亚洲亚洲人成综合网络| 五月婷婷在线短视频| 色爽九九| 色婷婷色| 午夜丁香五月天综合| 午夜无码熟熟妇丰满人妻| 99惹在线精品免费观看| 91九色国产在线| 五月天AV大香蕉| 五月婷婷六月开心| 色婷婷丁香花五月天| 新99思思视频| 狠狠色丁香| 婷婷精品免费久久| 色综合久久88色综合天天看| 九九美女视频| 丁香五月亚洲| av操B网站| 99精品在线下载| 日本精品人妻无码77777| 开心久久五月天| 色五月天综合网| 丁香五月欧美成人| 超碰在线免费| 激情爱爱网站| 狠狠五月激情丁香六月| 91人碰| 思思热在线视频精品| 九九九九中文字幕| 婷婷五月天在线综合| 在线不卡的视频| 79色色色色| 97超级碰碰碰久久久| 婷婷五月天激情五月天| 色婷婷五月综合激情中文字幕| 日韩av干| 91男同视频| 熟女五月天久久综合| 免费观看全黄做爰的视频| 91婷婷五月天综合视频| 99riav 亚洲| 五月婷婷丁香av| AV片在线观看| 六月丁香社区| 久久一级片| 天天操天天插| 激情综合网五月丁香| 91操人视频| 婷婷五月激情网站| 国产精品18久久久| 丁香色播五月天| 97午夜一区二区| 99视频在线精品免费观看2| 超碰色人妾| 婷婷成人AV| 久操大香蕉| 91日韩在线| 亚洲精| 免费看片在线观看| 久久五月天色婷婷| 激情五月综合网| 婷婷色色五月天| 五月丁香婷婷综合网色欲| 人操91在线| 五月婷婷偷拍| 九九热视频精品2| 屁股翘好撅高迎合跪趴| 五月天婷婷视频30| 色婷婷色五月综合| 欧美97色| 六月综和久久| 久久丁香网| 激情床戏| 久热这里有精品视频| 精品热青草| 天堂综合久久| 狠狠艹狠狠艹| 99婷五月| 欧美超级视频97| 婷婷日在线观看| 亚洲xx在线| 98色花堂98t.R| 精品无码av丁香五月激情| 婷婷五月,综合伊人| 欧美色色色色色色| 97亚洲色 torrent magnet| 五月丁小婷婷激情四射| 亚洲综合五月天婷婷丁香| 日韩免费乱轮网站| 99久久婷婷精品视频| 色欲影香| 色婷婷在线综合色播网| 欧洲区自拍| 开心激情婷婷| 精品亚洲VA网站| 天天日天天做天天舔| A片天天| 国产成人av在线播放| 久久婷婷五月综合激情国产| 97人妻碰碰碰久久| 九九碰九九爱97| 色婷婷电影网| 欧美色骚婷婷五月天| 在线超碰91| 亚洲欧洲中文日韩久久AV乱码| 五月婷婷丁香五月| 五月婷婷六月激情在线|