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

ARTICLE DETAIL

資訊詳情

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

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

MFC TCP Socket實戰(zhàn):CAsyncSocket異步通信與粘包處理 簡介這份壓縮包面向Windows平臺網(wǎng)絡編程入門與進階學習者圍繞基于Socket的TCP通信用MFC搭建客戶端/服務器C/S架構示例幫助理解連接建立、數(shù)據(jù)收發(fā)與連接關閉的完整流程適合課程實驗、自學練習和項目原型參考。包內共4個文件以2個cpp源文件和2個h頭文件組成整體約6KB體量輕便便于直接對照閱讀與二次練習。已有1264人學習下載說明其在MFC網(wǎng)絡編程練習場景中具有一定參考價值。代碼圍繞CSocket對象的使用展開覆蓋Winsock初始化、服務器綁定監(jiān)聽與接受連接、客戶端連接服務器以及Send/Receive收發(fā)數(shù)據(jù)和Close釋放資源等關鍵環(huán)節(jié)能夠幫助讀者把抽象協(xié)議概念落到具體調用上。讀者可借此梳理MFC對Winsock的封裝方式理解客戶端與服務器對話框類的職責劃分并在此基礎上調試、擴展自己的TCP通信程序。1. 從一次“連不上”的調試說起這套 MFC TCP 程序到底解決什么問題把 MFC、TCP、Socket 三個詞湊進同一個工程真正卡人的往往不是 API 名字記不住而是 MFC 的消息循環(huán)、線程模型和窗口生命周期怎么跟網(wǎng)絡收發(fā)共存。這套 C/S 架構程序把服務端監(jiān)聽、客戶端連接、消息收發(fā)、日志顯示拆成幾個職責清晰的類用 CAsyncSocket 的異步事件模型驅動收發(fā)適合做局域網(wǎng)聊天、設備指令下發(fā)、上位機通信這類小體量工具的原型也適合剛接觸網(wǎng)絡編程、想看清一次連接從建立到斷開完整鏈路的開發(fā)者。它不追求高并發(fā)指標追求的是結構清楚、每一步都能打斷點看明白。2. 工程結構與選型先定 CAsyncSocket 和 CSocket 的邊界動手寫代碼之前工程怎么切分、用哪套 socket 封裝比后面寫多少行都關鍵。很多人一上來就把CAsyncSocket塞進對話框類里結果一個OnReceive里既有界面刷新又有協(xié)議解析改到第三個功能就再也理不清了。2.1 一份可以直接編譯的雙工程目錄這個項目按“共享協(xié)議 服務端 客戶端”三塊切Common放兩端都要用的頭文件Server和Client各是一個獨立的 MFC 對話框工程編出來的兩個 exe 可以分別跑在兩臺機器上也可以在同一臺機器上開兩個實例自測。MfcTcpCS/ ├── Common/ │ ├── Protocol.h // 包頭結構、消息類型枚舉、字節(jié)序轉換 │ └── PacketBuffer.h // 收包緩沖區(qū)負責粘包/半包切分 ├── Server/ │ ├── ServerApp.h/.cpp // CWinApp 派生InitInstance 里調 AfxSocketInit │ ├── ServerDlg.h/.cpp // 主對話框日志、在線列表、廣播下發(fā) │ ├── ListenSocket.h/.cpp // CAsyncSocket 派生只負責 accept │ └── ClientSocket.h/.cpp // 每個連接一個實例負責收、發(fā)、切包 └── Client/ ├── ClientApp.h/.cpp ├── ClientDlg.h/.cpp └── ClientSocket.h/.cppListenSocket和ClientSocket都從CAsyncSocket派生但職責完全不同前者一輩子只干一件事——把新連接從內核隊列里撈出來后者是“一線工人”一個實例對應一條 TCP 連接負責這條鏈路上的全部讀寫和異常處理。把這兩件事拆開后面加“最大連接數(shù)限制”“IP 黑名單”才有地方插。ServerDlg只做三件事接按鈕、寫日志、維護在線列表。它不直接持有 socket 的讀寫邏輯所有網(wǎng)絡事件通過自定義窗口消息回到這里這樣界面線程永遠不會被阻塞。類基類職責生命周期CListenSocketCAsyncSocket監(jiān)聽端口處理 OnAccept與主對話框同壽CClientSocketCAsyncSocket單連接收發(fā)、切包、斷線檢測連接建立時 new連接關閉后 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轉成虛函數(shù)回調也就是常說的OnAccept、OnConnect、OnReceive、OnSend、OnClose。它不會阻塞調用線程天然適合掛在對話框上跑。CSocket又往下派生了一層內部自帶一個隱藏窗口和阻塞循環(huán)配合CSocketFileCArchive能寫出接近文件讀寫的代碼。上手最快但坑也集中阻塞特性會卡住 UI 線程和CArchive搭配時Receive讀到的字節(jié)數(shù)和對端Send的字節(jié)數(shù)沒有一一對應關系半包一來就拋異常而且異常棧往往看不出真正原因。這個項目選CAsyncSocket理由很實際協(xié)議體就是二進制塊和字符串沒有復雜的對象序列化需求異步回調配上自己維護的收包緩沖區(qū)控制權在我手里。常見做法是——消息頻率低、協(xié)議簡單CAsyncSocket足夠真要傳大文件、需要做背壓控制反過來用獨立工作線程加阻塞 socket把收發(fā)和 UI 徹底隔離反而更省心。3. 服務端拆解監(jiān)聽、accept 和多連接托管服務端是整條鏈路的起點它出問題的表現(xiàn)往往很隱蔽——客戶端那邊只看到“連接被拒絕”或者“連上三秒就斷”真正的原因藏在服務端的初始化順序和對象生命周期里。3.1 初始化和監(jiān)聽AfxSocketInit 到 ListenAfxSocketInit()必須在任何 socket 調用之前執(zhí)行它內部完成了WSAStartup并把版本號協(xié)商好。放到CWinApp::InitInstance的最前面是最省事的做法漏掉這一步后面所有 socket 調用都會返回WSAStartup未執(zhí)行的錯誤而且錯誤碼不直觀。// ServerApp.cpp BOOL CServerApp::InitInstance() { // 必須在任何 socket 調用之前完成 Winsock 初始化 if (!AfxSocketInit()) { AfxMessageBox(_T(Winsock 初始化失敗程序退出)); return FALSE; } CWinApp::InitInstance(); CServerDlg dlg; m_pMainWnd dlg; dlg.DoModal(); return FALSE; // 對話框關閉即結束不再進入默認消息循環(huán) }InitInstance的返回值這里特意給了FALSE。原因是主界面是模態(tài)對話框DoModal返回意味著用戶已經(jīng)關窗此時如果再進CWinApp::Run的消息循環(huán)進程會卡在一個沒有窗口的循環(huán)里任務管理器里看著像僵尸進程。真正開始監(jiān)聽的動作放在對話框的按鈕響應里方便反復啟停// ServerDlg.cpp —— “開始監(jiān)聽”按鈕 void CServerDlg::OnBnClickedBtnListen() { if (m_pListen ! nullptr) return; // 防重復點擊 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對應 TCPSOCK_DGRAM是 UDP寫錯了不會編譯報錯但行為完全不同。Listen的參數(shù)是 backlog指的是內核等待隊列的長度不是最大并發(fā)連接數(shù)很多人以為調大它就等于提高并發(fā)上限實際上它只影響“三次握手完成但還沒被 accept 取走”的連接能排多長隊。這個值一般給 5 到 10 就夠局域網(wǎng)工具用。GetLastError返回 10048 是端口被占用八成是上一次調試時進程沒退干凈返回 10013 是權限不夠通常是端口號小于 1024。3.2 OnAccept一次事件里把隊列收干凈CAsyncSocket的OnAccept是邊沿觸發(fā)式的通知——內核告訴你“有連接進來了”但不會告訴你“有幾個”。如果回調里只Accept一次而恰好同一瞬間來了三個客戶端剩下的兩個就會一直躺在隊列里直到下一次有新連接觸發(fā)事件才被順手取走。表現(xiàn)出來就是“客戶端連上了但服務端列表里沒有”或者“第二個客戶端連不上”。// 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對象”所以必須在調用前 new 出來。失敗時一定要delete這是最容易漏的一行——每次空 accept 都會泄漏一個對象和它內部持有的 SOCKET 句柄跑一晚上能把句柄耗光最后表現(xiàn)成“新連接全都失敗”。循環(huán)的退出條件就是Accept返回FALSE此時GetLastError通常是WSAEWOULDBLOCK意思是隊列已經(jīng)空了正常情況不用當錯誤處理。3.3 連接對象托管和銷毀誰 new 誰 delete服務端的連接表放在CServerDlg里用CArrayCClientSocket*, CClientSocket*或者std::vector都行。關鍵約定只有一條對象由對話框創(chuàng)建、由對話框刪除CClientSocket自己絕不delete this。斷線時OnClose會被觸發(fā)但此時對象還在 MFC 的異步通知鏈路里直接刪自己會導致回調返回后訪問已釋放內存典型表現(xiàn)是關閉客戶端后服務端彈“內存不能為 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(); // 先關句柄 delete pClient; // 再刪對象 return 0; }PostMessage和SendMessage在這里有本質區(qū)別PostMessage只是投遞立即返回不會在 socket 回調里同步執(zhí)行刪除邏輯SendMessage會等待消息處理完才返回等于在回調里就把自己刪了必崩。注意Close()要和delete分開寫順序反了會導致CAsyncSocket析構時去關一個已失效的句柄調試版會彈斷言。4. 收發(fā)層拆解粘包、半包和跨線程回 UITCP 是字節(jié)流不是消息流。這條常識誰都背得出但真寫起來Receive一次讀到半條消息、或者兩條消息粘在一起的情況幾乎每個人都會遇到一次。收發(fā)層的設計目標就一個讓上層拿到的一定是完整的一條消息。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)絡字節(jié)序 UINT16 type; // 消息類型 UINT16 reserved; // 預留方便以后擴展 }; #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不一致切包直接錯位而且錯得很隨機——改了結構體的人自己測沒事別人拉下來就崩。length字段走網(wǎng)絡字節(jié)序發(fā)送前htonl收到后ntohl。x86 是小端兩端都是 Windows 時看著“不轉也能跑”一旦以后接個 ARM 板子或者用別的語言寫客戶端立刻翻車。這個轉換成本幾乎為零沒有理由省。4.2 OnReceive 里循環(huán)讀到 WSAEWOULDBLOCKOnReceive同樣是“有數(shù)據(jù)了”的邊沿通知一次回調里內核緩沖區(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(); // 對端正常關閉 return; } m_recvBuf.Append(buf, n); } ParseBuffer(); // 緩沖夠了就切包分發(fā) CAsyncSocket::OnReceive(nErrorCode); }三個退出條件要分清楚WSAEWOULDBLOCK是“暫時沒數(shù)據(jù)了”屬于正常n 0是 FIN 包對端主動關了其他錯誤碼才是真異常比如 10054 是連接被對端重置。ParseBuffer負責把緩沖區(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ū)會一路漲到內存爆掉而日志里什么都不會打印屬于典型的黑匣子問題。4.3 Send 只發(fā)出去一部分怎么辦Send的返回值是“本次實際寫進內核發(fā)送緩沖區(qū)的字節(jié)數(shù)”它可能小于你請求的長度。局域網(wǎng)內幾乎不會發(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ā)送同一段數(shù)據(jù) } return true; }把包頭和包體拼成一次Send是刻意的如果先發(fā)頭、再發(fā)體中間被別的線程插進來發(fā)了一個包對端就會按“頭-別人的頭-別人的體-自己的體”切直接錯亂。要么拼成整塊發(fā)要么加發(fā)送隊列串行化簡單項目選前者。WSAEWOULDBLOCK在發(fā)送側的處理要按場景定聊天工具可以失敗重試廣播場景最好維護一個發(fā)送隊列等OnSend回調來了再繼續(xù)。這里為了代碼量控制直接返回失敗由上層提示“發(fā)送失敗”。4.4 跨線程回 UIPostMessage 加堆對象CAsyncSocket的回調運行在 MFC 的異步通知線程里直接在這些回調里操作控件輕則界面卡頓重繪異常重則彈斷言。穩(wěn)妥做法是把數(shù)據(jù)打包用PostMessage投遞到主線程。// ClientSocket.cpp void CClientSocket::Dispatch(UINT16 type, const void* body, int len) { // 堆上分配接收方負責 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; // 心跳不帶內容立刻回收 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引用。約定好“接收方負責 delete”代碼里每一處都照做就不會漏。CString這里按LPCSTR構造意味著協(xié)議體按 ANSI 處理。如果客戶端要發(fā)中文又不想踩編碼坑統(tǒng)一改成 UTF-8發(fā)送端把CStringW轉 UTF-8 字節(jié)流接收端用MultiByteToWideChar轉回來再顯示兩端一致就行最怕的是一端用CStringA一端用CStringW。5. 避坑與排查MFC Socket 最容易出問題的四個位置這一節(jié)的現(xiàn)象都是我在調試這套結構時真實撞過的順序按“從啟動到退出”排。5.1 連接建立階段的坑現(xiàn)象一點了“連接”客戶端界面直接卡死幾秒然后提示超時。原因在 UI 線程里用了CSocket的阻塞式Connect或者用CAsyncSocket::Connect之后立刻彈了個模態(tài)框。前者會把消息循環(huán)堵死后者會讓OnConnect永遠進不來——CAsyncSocket的事件是靠窗口消息驅動的模態(tài)對話框自己跑了一套消息循環(huán)異步通知被吞掉了。解決連接動作只調Connect立即返回結果全在OnConnect里處理用nErrorCode判斷成功與否。非要在等待期間給用戶反饋用非模態(tài)對話框或者直接置灰按鈕加一句“連接中”。超時交給系統(tǒng)Connect本身有內核級超時想要更短就自己起個定時器超時后Close掉重來?,F(xiàn)象二服務端顯示監(jiān)聽成功客戶端就是連不上錯誤碼 10061。原因Windows 防火墻攔了。第一次運行編出來的 exe系統(tǒng)會彈一個“是否允許訪問網(wǎng)絡”的框如果當時點了取消之后這個程序的所有入站連接都會被靜默丟棄而且不會再彈第二次。解決到防火墻的“允許應用通過”里把這個 exe 勾上或者調試期間臨時關掉專用網(wǎng)絡的防火墻。順帶一個經(jīng)驗調試時用 127.0.0.1 先確認邏輯通不通再換局域網(wǎng) IP 測能把“防火墻問題”和“代碼問題”分開。綁定地址用INADDR_ANY而不是127.0.0.1后者只接受本機連接別的機器連過來會被拒。5.2 收發(fā)階段的坑現(xiàn)象三中文消息收到一半是亂碼或者最后幾個字變成方塊。原因發(fā)送端按CString的GetLength()算字節(jié)數(shù)接收端按字節(jié)構造CString。CString在 Unicode 工程里是寬字符GetLength()返回的是字符數(shù)一個漢字算 1占內存卻是 2 字節(jié)長度對不上。另一個常見原因是直接用strlen算 UTF-8 字符串長度遇到中文也會偏。解決協(xié)議體一律按字節(jié)流處理。發(fā)送前明確轉成std::string或者CByteArray長度取字節(jié)數(shù)接收端用MultiByteToWideChar(CP_UTF8, ...)轉回寬字符再顯示。兩端的編碼約定寫進Protocol.h的注釋里誰改誰負責?,F(xiàn)象四客戶端發(fā) 10 條消息服務端日志里只有 3 條內容還是拼接的。原因OnReceive只調了一次Receive剩下的字節(jié)留在內核緩沖區(qū)等下次事件而客戶端是連續(xù)Send的短時間內不會再觸發(fā)新事件數(shù)據(jù)就一直卡著。另一種情況是切包邏輯里RemoveHead的長度算錯把下一包的頭也吃掉了。解決按 4.2 的寫法Receive循環(huán)到WSAEWOULDBLOCK為止切包時嚴格用sizeof(PacketHeader) ntohl(length)作為消費長度別憑感覺寫常量。調試期在ParseBuffer里加一行日志打印緩沖區(qū)當前長度和切出來的包長跑十幾條消息就能看出規(guī)律。5.3 關閉和退出階段的坑現(xiàn)象五關掉客戶端之后服務端再啟動就報端口被占用10048。原因TIME_WAIT狀態(tài)主動關閉的一方會在這個狀態(tài)停留幾十秒。調試時反復啟停端口就一直被上一個進程占著。解決監(jiān)聽前給 socket 設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)是進程在任務管理器里掛著不退下一次調試端口還是占著。6. 二次開發(fā)把它改成一個真能干活的工具這套骨架跑通之后改造成本主要花在三個地方按投入產(chǎn)出比排。第一是加心跳和超時踢人。協(xié)議里已經(jīng)留了MSG_HEART服務端維護一個mapSOCKET, time_t起一個SetTimer每 30 秒掃一遍超過 90 秒沒更新的連接直接Close并從在線列表移除。沒有這一步客戶端拔網(wǎng)線、進程被強殺這類情況服務端完全感知不到在線列表會一直掛著一堆僵尸連接廣播時還要往死連接上寫。第二是把廣播做對。別在 UI 線程里循環(huán)調SendPacket客戶端一多界面就卡。做法是給每個CClientSocket掛一個std::dequeCByteArray發(fā)送隊列UI 線程只負責push真正的Send放在各自的OnSend回調里推進寫不動了就停等下一次可寫事件繼續(xù)。這個改造大概幾十行但決定了這套東西能帶 5 個客戶端還是 50 個。第三是換成二進制協(xié)議?,F(xiàn)在包體是文本解析靠字符串字段一多就難維護。把MSG_LOGIN的包體定義成struct同樣#pragma pack(push, 1)讀寫時逐字段memcpy配合包頭里的type做分發(fā)擴展新消息只要在Protocol.h里加一個枚舉值和一個結構體。改造點改動位置大致工作量解決的問題心跳超時CServerDlg 定時器半天僵尸連接、在線狀態(tài)不準發(fā)送隊列CClientSocket一天UI 卡頓、大廣播丟包二進制協(xié)議Protocol.h ParseBuffer一天字段擴展、解析性能驗證方法上我會準備兩個客戶端實例再加一個用腳本寫的假客戶端。腳本那邊故意一次只發(fā) 3 個字節(jié)把包頭拆成兩批送專門驗證半包處理再故意連上不登錄驗證服務端的超時邏輯最后用taskkill強殺客戶端看服務端多久能從在線列表里把它清掉。這三種病態(tài)輸入跑過一遍基本就敢往設備上掛了。從那以后我每次寫這類帶網(wǎng)絡的小工具都會先把“發(fā)包不完整、收包不完整、連接突然消失”這三件事的日志打點加進第一版而不是等出問題了再回來補。調試網(wǎng)絡問題最貴的是信息日志里多一行緩沖區(qū)長度可能省掉一整晚。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 上床不卡网站| 日本不卡免费二区| 日本人人操人人操| 麻豆a'v电影| 人人操我人人干| 蜜臀精品1区2区| 青青青草原| 成人a级高清视频在线观看| 91精品国产综合久久久蜜臀| 亚一综合久久久久久久久久| 热久久国产精品视频大陆精品| 久久加勒比| 超碰在线看| 久久99干一本高清| 色色五月婷| 男人天堂最新手机版在线青青草| 中文字幕交换人妻| 大香蕉2017| 亚洲国产欧美中文永久| 97免费视频在线| 柠檬AV导航| 东京热,男人的天堂| 亚洲精品精品一区二区| nuu12国产麻豆精品| 久久伊人五月天| 大香蕉视频啪啪啪啪| 黄色毛片A片| 亚洲少妇免费视频\| 美国人人操人人操| 久久久久久久久久久久欧美日| 午夜福利av电影在线| 一区二区三区色综合| 天天做日日做| 风韵犹存大大大大香蕉| 熟女人妻av在线资源,黄色的资源| 72av视频| 久久精品天美| 国产18精品亚洲精品| 天欧美在线| 精品性爱无码在线播放| 97这里有精品| 亚洲天堂第一页| 国产熟女乱论| 96久久久| 国产十八禁视频| 无码在线亚洲| 国产高清成人免费视频| 中文字幕78| 丁香五月综合| 男人天堂东京热| 久久99草| www.狠狠干.coom | 国产一二三福利视频网| 偷拍 精品 另类 四区| 丝袜美腿亚洲| 少妇色欲综合网2| 秋霞男人网| 园内精品自拍视频在线播放| 啊啊啊爽爽| 欧美在线大香蕉| 操人91| 午夜爽爽爽| 亚洲区限制级| 婷婷久草一区二区三区| 国模无码一区二区三区在线| 精品久久久久久中文字幕视频免费| 色爱欲亚洲| 伊人久操| 十八禁av无码免费网站APP| 久久华人网| 色综合中文字幕不卡| 少妇高潮对白在线观看| 乱伦强奸区日韩| 少妇人妻在线| 熟妇高潮二区三区| 久久超碰大香蕉| 五月香婷婷| 国产日韩精品人妻久久久久色欲网站| 欧美色干| 亚洲麻豆18发?| 后入内射蜜桃臀| 日韩性爱再线视频| A 在线网址| 91精品网站| 热热色色综合| 大香网伊人久久综合网eew| 九色视频91| 成人性爱视频在线看| 日韩小电影| 久操| 日韩特一级久久| 亚爽爽爽爽爽爽爽爽| 91亚洲精品青草| AV九九| 亚洲精品第一| 女人高潮抽搐喷水视频网站| 欧美性爱十八禁| 天天草夜夜草高潮片| PMv在线观看| 欧美成人性爱视频在线播放| 国产精品第一区第一页| 欧美日本国产日韩激情视频| 亚洲中文日韩欧美大香蕉视频| 91人妻人人澡人人爽人人精品| 中文字幕熟女人妻丝袜丝| 精品久久九| 欧美精品丝袜久久久中文字幕| 三级三级三级日本99| 丁香五月色| 超碰在线看| 国产精品久久久久久久黄无码| 国产黄色在线播放观看| a片偷拍视频| 国产Av超碰| 亚洲国产一区二区入口| 围产精品一区二区三区视频播放| 国产成人免费观看在线视频| 丁香五月天激情网站| 人、人、摸,人、人、草| 在线综合色| 97av在线视频| 97干在线看| 亚洲AV无码天美传媒一区| 精品人妻1237| 亚洲国产丝袜在线观看| 欧美日韩亚洲国产中文永久天天看 | 日韩精品人妻一| 福利伊人玖玖国产| 久操婷婷| 白丝1区2区3区| 超碰在线974| 少妇500双飞99| 干妹子| 91女色| 免费a v| 国产美女销魂在线观看不卡| 岛国艾薇凹凸视频天堂| 欧美一级色| 宅男91视频在线播放| A啊啊在线观看| 足交视频老司机| 另类欧美色| 日韩激情毛片一级久久久| 333kkkk·亚洲com久久| 日本在线一二 | 日韩性爱电影一区| 日韩乱码Av| 蜜屁Av| 老鸭窝在线视频播放| 欧美91在线| 国产美女销魂在线观看不卡| 国产超碰| 骚女高跟AV在线| 欧美日韩中文字幕人妻| 尤物视频一区| 91久久久久久久久久久| 九九免费影片| av黄图片在线观看| 日韩黄色一区二区三区| 中文字幕少妇色 | 内射卯月麻衣| 成人av影院在线观看| 欧美极度丰满熟妇hd| 天天淫人人妻日日色| 丰满欧美放荡少妇在线| 久久精品福利影院| 亚洲AV乱码专区国产噜噜亚洲| 蜜臀一二三区| 亚洲无码太久| 乱老熟女一区二区三区| 91天堂| 亚洲精品aa久久伊人| 久久9 9 9精品| 97欧美色| 无码WWW免费视频网站| 嗯嗯啊啊用力视频免费| 97干97色| 色五月婷婷五月天| 99rre在线精品99re8| 99热色这里只有精品| 天天享受天天看| 69XX一中文字幕人妻91| 婷婷色婷婷| 性生活无遮挡纯毛片在线看| 一个人免费视频观看在线WWW | 青青操在线视频| 久久一区二区高清免费| 国产1727欧美| 日韩国产欧美伦理在线| 欧美综合 站| yaouchengrenav| 久久免费老司机精品| 97人人夜| 欧美成人性爱视频大全| 欧美日日人人天天| 一级久久性爱视频| 婷婷久久久精品| 在线中文字幕极品av| av久日| 天天干干天天干干| 亚欧美综合网。| 亚洲 自拍偷拍 欧美| 青青草字幕AV| 久久毛卡| 日韩精品亚洲一二三| 国产精品自拍欧美在线| 欧美97免费| 开心五月深爱五月| 久久久久久久9999| 亚洲av夫妻操穴网| 欧美一级A一级a爱片久久| 久久久久13| 无码精品久久久久久亚洲| 玖玖视频在线资源一区二区三区| 欧美日韩在线小说 | 亚洲中文一区二区三区| 舔舔啊| 思思99热| 涩综合导航| 福利天堂| 日韩人妻一区二区精品| 亚洲久久久| 97蜜桃综合| 无码高清少妇久久| 日本布卡一区二三区| 一区二区偷拍拍视频| 3PAV乱伦视频| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 日韩欧美偷拍美女视频| 久久这里只精品99re66图| 久9综合在线| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 亚洲中文国际强奸字幕| 亚洲97超碰| 婷婷伊人一区| 久久国内| 日本一二区不卡| 久久有碼| 五月婷在线| 波多野结衣AV无码一区| 国产三级中文字幕粉嫩| 国产久久久9999| 中文字幕狠狠玩| 亚洲日韩电影| 后入式五六区| 国产精品久久久视频| 天堂а√在线最新版在线| 婷婷激情五月综合| 亚州综合AⅤ| 伊人网av| 欧美午夜视频精品久久| 欧美成人性爱视频在线播放| 青青久久久| 亚洲天堂东京热| 日本丝袜人妻内射| 老司机天天操| 欧美综合另类| 夫妻AV网站| 国产乱婷婷精品二区三区| 久久亚洲精品成人av| 亚洲一区二区三区春色| 极品少妇久久久久| 久久草视频污视频| AV一二区| 一区二区三区男女操逼黄色小电影| 日韩色| 国产偷人伦激情在线观看| 国产免费一区| 青青草日本中文字幕| 成人看片网站| 激情色色| 被体育老师抱着c到高潮| 日韩操啪| 丁香九月婷婷| 97这里有精品| 啊啊啊好想要| 亚洲男人的天堂va亚洲男人社| 日韩三级性| 中文在线久久字幕| 日韩一区二区熟女| 区一在线观看| 日韩99神马视频播放片在线播放| 大香蕉乱伦视频网| 深夜激情无码| 美国日韩黄色片| 日韩免费看在线黄色片| 青青免费在线视频一区| 无码久久亚洲高清,| 亚洲欧美91| 黑人性欧美| 欧美色吧综合| 欧美精品系列| 性欧美| 蜜桃午夜视频一区二区| 一本色道久久综合亚洲二区三区| 亚洲色图欧美色图制服诱惑| 亚洲色图第一页| 中文字幕一区二区三四五区日日骚| 丝袜综合| 国产少妇高潮| 加勒比东京热五月天天堂网| 欧美综合亚洲| 深喉吞精| 热99这里有精品综合久久 | 五月天亚洲色图| juliaann丝袜| 久久久新亚洲AV| 操逼A∨| 免费国产电影一区二区| 久久精品日韩| 1024人妻熟女一区二区三区| 欧美一区二区亚洲天堂| 亚洲另类久操网| 91 国产丝袜在线放观看| 天天肏美女| 啊操爽品善一区二区三区| 亚洲永久永久永久永久一级一级一级精品 | 欧美18 在线观看| 波多野42部无码喷潮在线观看| 四虎影视永久在线免费| 99亚亚热| 美骚妇av高清在线| 欧洲色综合| 玖玖爱影院| 人人操 欧美| 在线观看亚洲专区| 久久久婷| 人妻激情在线视频| 中出欧美| 777AV电影| 亚洲精品日日夜夜52| 亚洲欧美一区二区三区在钱蜜桃| 精品中文日韩字幕视频| 天天欧美| 乳欲人妻办公室奶水| 天天肏夜夜肏| 粉嫩少妇自慰在线| 成人区人妻精品一| 亚洲一区操| 色婷婷网| 91网站视频在线观看| 日韩特一级久久| 久久久久亚洲| 国产精品香蕉热久久新品| 天堂九九九九九九九九九| 黑人与人妻| 偷拍导航视频网站| 精品中文字幕第一页| 日本久久精品| 男人的亚洲天堂| 久久 精品| 国产大学生口爆吞精合集| 婷婷在线视频| 日韩青久久| 黄色免费网| 亚洲熟女中文字幕在线| 91性高| 2017天天拍大香蕉| 综合一区中亚洲国产成人综合精品 | 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 亚洲综合网图| 熟女精品日韩一区二区三区| 午夜120视频在线观看| 久久精品亚洲婷婷| 久久这里只| 国产一区二区三区精品观看啪| 中文字幕在线观看第二页| 一本大道久| 青青伊人这里只有精品| 大香蕉在线86| 五月婷亚洲精品天堂| 婷婷亚洲综合| 中文字幕精品专区搜索结果91| 成人26uuu| 天天色悠悠激情| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 国模无码人体一区二区三| 国产成人在线观看综合| 日韩欧美麻豆 | 天天综合亚洲综合| 校园春色综合色| 天天欧美| 美女超碰978| 天天干夜夜鈤| 亚洲 日本 一 二 三| 亚洲天堂一二| 丁香五月天堂| 欧美人妖内射| 久操综合在线| 欧美亚洲| 爱干爱射网啊啊啊| 久久精品 六十路 熟女 欧美| 男人的天堂2018东京热啪啪啪| 国产精品日日摸天天碰| 久99| 黑人免费福利视频| 97色色,97综合| 淫荡熟女乱伦网| 屁股久久久久久久久| 亚洲欧洲精品视频发布| 老色鬼成人精品视频下载大在线观看| 亚洲最大AV网| 男人天堂资源| 国产精品久久久久绯色| 久久黄片国产一区二区| 欧美激情久久久久| 五月婷婷色| 色香欲影| 天天综合香 ld视频| 日韩欧美午夜一区二区| 国产精品3| 亚洲综合中文字幕有码| 四虎在线视频| 大香蕉伊人一区在线观看| 国产家庭乱伦表演| 日韩八十路老熟女| 91亚·色| 九月丁香婷婷色| 亚洲做性| 久久久久久久九九九九九九| 亚欧成人综合影院| 人妻娇喘 激情视频| 天天干天天日天天射黄色| 中文字幕美女91| 97精品在线| 婷婷久久网| 亚洲乱码精品一区二区| 欧美亚洲国产日本在线,久久精品国产| 欧美视频一区二区在线| 欧美AB在线| 亚洲少妇色图自慰直播| 一区在线观看中文字幕| 丰满美女一级毛片在线播放| 桑老女人九区| 青久操| 久久久婷婷婷| 综合欧美激情网| 亚洲天堂男人天堂网| 天天综合网1| 五月丁香综合激情| 国产女人和拘做爰视频 | 亚洲天堂自拍| wwwss在线观看| 中文字幕AV乱伦| 人妻熟女一区二区三区视频| 九九夜精品九九在线| 国产伦精品一区二区三区在线观| 欧美中文字幕日韩在线| 欧美92| 久久久久9999精品九九九| 丁香五月成人| 香蕉人人操tv| 大香蕉黄色一级片免费看| 欧美日韩另类激情图片| 亚洲AV在线资源| 丝袜狠狠草尤物人妻av91| 大香网伊人久久综合| 高潮毛片无遮挡高清免费| 亚洲 欧美 色图| 在线情色电影 91大 | 立川理惠无码一区二区| 精品成人无码| 午夜成人爽爽爽爽A片李冰冰| 久久久一二三四区| 久久精品高清无码一区| 91强在线播放| 欧美老妇女内射网址| 欧美极品女人的天堂| 白嫩国模丰满一二三区| 一区二区影院| 18禁网站在线播放| 欧美性天天影视| AV免费在线播放一区| 成人无码在线超碰网| 色99999| 国产400孕妇孕交群| 极品出轨视频网站| 国产视频97| 色综合1991| 欧美日韩天堂| 少妇丝袜在线观看AV| 国产美女精品| 久久久99999久网站| 欧美白嫩女HD| ai欧美亚洲小说| 男生女生啊啊啊啊| 欧美亚洲成人在线一区二区三区| 天堂伊人久久| 97国产伦理| 日本久久999| 日本孕妇孕交| 久久久久久99999国产精品| 99爱爱| 91热色| 精品国产乱码久久久久久免费| 亚洲女人毛茸茸91| 一本色道久久综合精品婷婷| 亚洲男人的天堂va亚洲男人社| 啪啪自拍九九综合| 日韩在线观看三级电影| 超碰日韩人妻| 色呦呦呦在线观看视频| 久久婷婷伊人| 天天操av懂色| 久久久久久久国产| 国产精品色约约| 久操电影网| 78久久| 中文字幕天堂在线| 上海一级黄片| 91日韩在线| 97玖玖人妻| ai欧美亚洲小说| 精品免费成人久久| 国产强奸AV在线| 蜜桃视频成a人v在线| 国产成人无码久久精品| 青青草九九九九九| 劲爆欧美人妖三区91| 青青草依人大香蕉| 夜夜操美女| 日操粉逼逼| 久久天堂婷婷网| 色诱avtt| 天堂亚洲精品| 国产成人精品必看| 91蜜桃婷婷狠狠久久综合9色| 欧美日韩国产传媒在线精品| 久久久久久久久久久久九| 殴美色网| 精品国产一区二区三区香蕉欧美| 性做久久久久久免费观看软件| 欧美亚洲玖玖玖| 久偷拍欧美日韩三区| 亚洲交性| 51一区二区三区| 午夜精品99久久久久传媒| 精国久久一区二区三区98| 欧美性夜| 欧美日韩性爱无码| 欧美综合第一| 78精品| 人人摸人人添人人操| 玖色AV| 欧美人妻熟女在线| 久思思热视频在线观看| 99re这里只有精品中心播放 | 人妻天天夜夜爽一区二区| s片在线观看| 久久男人的天堂| 一级A啪啪啪啪| 人妻在线大香蕉| 久久超碰网| 插欧洲美女欧美精品| 亚洲永久AV无码精品秋霞| 久久啊啊啊| 激情看片网站| 日日干夜夜欢| 999亚洲国产视频| 亚州乱码中文字幕综合久久久| 大逼色网站| 国产真实野战在线视频| 国产精品久久久久久久免牛肉蒲团| 欧美日韩1234| 95人妻爽爽人人做人人澡| 精品久久艹| 日本狂喷奶水在线播放212| 尤物av网站| 超碰色综合| 亚洲精品99| 狠狠色五月亚洲91| 大香蕉综合| 91精品国| 2018色综合天天操| 精品在线78| 成人av动漫在线观看| 9ⅰ久久久天天| 精品久久久久久中文| 日韩电影天堂视频二区三区| 成人性爱AV在线免费观看| 久九干| 国语av狠狠色丁香婷婷综合激情| 精品国产少妇高潮视频| 欧州91高潮| 欧美 亚洲 综合 制服| 日韩色香| 啊a一区在线| 欧洲黄色网| 欧美成人亚洲精品| 黄色片,com| 精品一区二区三区四区外站| 思思热影视| 色天天野狼综合社区| 国产超碰| 9丨久久九九九| 人妻精品综合中文字幕在线| 国产精品日本无码A片| 亚洲永久永久永久永久一级一级一级精品 | 91天天c| 郑州宾馆老熟女露脸啪啪| 天天操天天日天天干| 无码精品一区二区三区潘金莲| 成年人免费观看网站| 在线国产探花| 青青久久艹| 高清不卡国产| 国产操逼视频在线观看| 欧美亚洲成人在线一区二区三区| 黄片直播三级黄片两女一男| 国产999精品久久久| 黄页大片在线观看| 一本精品日本在线视频精品 | 韩国女主播青草福利视频| 亚洲国产精品成人综合| 韩日精品福利视频一区不卡在线免 | 亚洲,欧美,综合网| 久久黄黄| 女人被男人桶爽视频网站| 久久精品91| 欧美.亚洲.另类.丝袜.制服.诱惑| 2024年最新色情网站在线观看| 躁躁日曰躁2020| 国产亲戚伦亲在线| 97超碰人妻| 秋霞一区二区三区四区五区六区七区| 欧美视频边做饭边橾| 亚洲丝袜少妇在线| 国产熟女精品区| 91九色在线| 国产成人91一区二区三区| 亚洲电影91| 日韩免费人妻色情网站| 青娱乐欧美激情一区二区| 国产美女高潮视频| 人妻 制服 日韩 中文 在线| www激情| 欧美一级特黄淫片在线观看| 九九热三级片| 青操影院| 亚洲A色| 五月丁香婷婷综合| 久久毛卡| 国产无吗在线播放| 国产成人五月天丁香花| 日韩精品三区四区| 欧美国产伊人久久久久| 69av一区二区三区| 超碰久在线天天做| 欧美v亚洲v综合v国产v妖精| 中文乱码字字幕在线第5页| 久9热| 国产女同视频在线播放| 凌辱美少妇久久aV| 丝袜天堂网| 亚洲大色堂| 日韩无码嘿咻黑热久| 亚洲乱熟女一区二区三区大香蕉| 大香蕉乱级| 日本精品五区| 青草精品视频一日本久久久久网站| 亚洲在高跟鞋自慰久久在色线| 口爆综合网| 五月天色色色| 亚洲熟女中文字幕在线| 凹凸视频在线观看伊人| 亚洲欧美在线观看无码| 亚洲综合电影| 夜色91| 91亚洲欧美激情| 男人天堂无码| 久久是精品| 嗯嗯啊啊好大好爽| 欧美 日韩 婷婷 五月| 国产视频一区二区三区久久亚洲天堂| 天天日日夜夜| 99性爱视频| 色五月综合网| 日本99久久| 99视频自拍| 色色五月丁香| 99ri视频| 一区二区日韩欧美久久| 三级三级三级日本99| 色综合久| 亚洲黑丝在线| 91色综| 日韩三级久久久| 男人天堂.AB| 好湿好紧好爽 视频| 欧美日韩人人精品| 国产精品2020| 五十路熟女工口| 久久99精品国产| 欧美久久久| AV男人天堂网| 97中文综合| JuliaAnn丝袜熟女系列| 亚洲国产综合图区中文字幕| 亚洲无码视频免费在线观看网址!| 午夜小电影在线插入淫高潮| 在线人成亚洲视频免费观看| 一区二区免费电影久久| 天天色,天天干,天天干| 自慰白浆在线观看| 色5月婷婷| 精品视频123区小说区| 爱爱动态试试看6 0秒| 亚洲天堂日本| 一二区在线观看视频| 啊啊啊啊啊啊啊啊视频| 91被操| 日韩无码黄色片| 五月婷婷爱六月丁香色| 欧美老熟另类| 91欧美美女日韩国产婷婷| 亚州国产成人精品女人久久| 久久久久久九九九九九| A级片日韩欧美国产欧美视频精选观看| A片大香蕉在线| 亚洲高清无码在线桃色| 另类天堂| 粉嫩少妇自慰在线| 日日骚av| 老熟女乱伦一区| 亚州操逼网| 欧美熟爽综合| 久艹99| 久久男人的天堂| 在线国产福利网址导航| 丁香激情网| 久久久专区| 久久东京热久久| 少妇无码av专区线| 97超碰碰碰| 少妇丝袜在线观看AV| 欧美色欧美| 白嫩国模丰满一二三区| 无码欧美有限公司| 一区二区三区男人的天堂| 色综合一本| 人人插人人搞人人操| 熟女色图在线| 校园春色亚洲色图| 加勒比在线视频一区二区三区| 欧美精品四区| 欧美日韩美女精品久草一区二区三区| 91综合色| 国产精品一区二区黄片| 91N综合在线| 蜜臀久久99精品久久久久| 国产强奸超碰AV| 六月丁操逼| 碰碰97| 午夜色婷婷| 人妻激情在线视频| 高清在线不卡一区二区 视频| 五月天色综合| 青草伊人久久| 伊人久久综合精品欧美| 老师充足的奶水小说| 香蕉99秘 一区精品蜜桃臀| 精品国产乱码久久久久久口爆网站 | Aa东京男人的天堂| 国产欧美日本亚洲精品 | 色欲蜜臀AV| 国产白丝在线| 麻豆国产视频精品观看| 青青草在线视频人人想人人上| 亚洲天堂久久| 日韩精品永久在线观看| julia中文字幕在线观看| 一级毛片电影免费看| 日韩免费人妻色情网站| 亚洲高清欧美总合| 婷婷色影院| 好爽要喷了| 国产女人操逼视频| 超碰69| 天天视频黄网站| 五毛骚逼极品美女怕怕| 神马久久久久久伦理片| 91精品国久久久久久无码| 免费αⅴ在线观看| 超碰免费欧美7| 乱伦3P视频| 91精品操美女| 中文字幕在线观看视频www| 国产自偷| 日本人妻A片成人免费看片| 小电影欧美91| 99热精品免费| 亚洲国产成人综合碰碰三级经典| 色蜜AV| 亚洲人成在线放东京热| 伊人影院在线理论播放| 性爱网站一区二区| 亚洲欧洲日产国产综合网| 日韩人妻一二三区视频| 丝袜高跟澳门91视频| 91精品久久久久久77777| 伊人91| 欧美熟女激情| 黄片免费久久久久久久| 国产自啪精品视频网站黑丝| 亚洲欧美经典一区二区 | 国产视频大全| 天天色播亚洲综合网站| 色噜噜日韩精品| 欧美性天天影视| 日韩一区二区精彩视频| 亚洲国产丝袜在线观看| 乱老女人一区二区视频| 人妻欧美| 欧美精品偷拍| 日本福利二区视频| 秋霞 色色| 97er欧美性| 亚洲欧洲网站免费观看| 91视频在线观看18| 熟妇艹鸡八| 亚洲AV无码国产精品久久久久| 青青草依人大香蕉| 亚州色站 日韩电影| 国产 日韩 欧美高清| 欧美色图亚洲色,麻豆| 夜夜嗨一区二区| 一级岛国大片| 天天影视综合色| 秋霞男人网| 免费人成?大片在线播放| 视频不卡中文字幕| 九九国产| 日韩欧美亚洲国产日韩| 综合欧美激情网| 色噜噜国产精品视频一区二区| 插老姨肥穴| 熟女视频久久| 性videos欧美熟妇hdx| 东京热AV男人的天堂| 久久久久国产亚洲一区欧美色图日韩| 18禁免费视频| 国产深夜福利| 骚货 中文字幕 av| 好爽,再快点啊哈嗯嗯嗯嗯| 精品国产乱码久久久久久口爆网站| www.91视频网| 亚洲日产专区婷婷| 精精夜夜| 亚洲色欲天天人妻无码系列专区| 一区二区三区美女超清| 色97欧美| 欧美论理片| 美女露胸露屁股| 色小视频蜜乳| 91搞逼视频| 天天噜| 国偷自 一区| 成人五月天色网| 97中文超碰| 亚洲精品成人| 欧美大香蕉同搞| 美女天天干| 日日不卡av| 五月天人妻综合| 天天射夜夜| 国产男女无套97| 美女尤物福利视频| 97在线精品| 911粉嫩人妻| 精品人体无圣光凹凸| 日韩欧美亚洲自拍偷拍| 色区97| KK色在线影院| 97精品在线| 久久动漫精品视频这里只有精品| 欧美熟妇乱码在线一区| 欧美极品女人的天堂| 久久美女福利是上海美女| 天天干人人干天天日97| 国内精品久久人妻性色av| 免费精品无码一级毛片牛牛影视 | 熟女精品一区二区在线观看| 亚洲色图20p| 91九九九馒头| 97精彩视频网站| 天天看综合网| 人妻久热在线| 歐美一級亂黃99在綫精品| 国产丝袜美女诱惑| 九九九久千久久激情蜜桃在线看 | 伊人五月天| 国产成人精品亚洲日本| 性爱乱伦一区| av一区二区三区 中文| 国产精品亚洲一区二区三区四区| 亚洲情色中文字幕一区| 久久久精品视频免费观看| 久久黄色性爱视频| 美女操逼福利视频| 99久久精品国产高潮| 强奸a片网| 色婷婷久久| 久久女人一区二区三区| 天美国产三级传媒| 久久久啊啊| 欧美亚洲一区二区久久久婷精品大包诱| 看黑丝美女操逼青青网站| 99国产精品免费| 久久噜| 亚洲欧美综合图片| 欧美在线啊啊| 思思视频免费看网站| 成人激情无码在线视频| 国产黄色av大片网站| 久久久婷| 中文字幕少妇色| 国产久久久久影院老熟女| 美女爽到高潮91| 亚洲无 码A片在线观看麻豆| 久久性生大片免费观看性| 亚洲春色欧美激情自拍| blacked精品一区国产| 欧美一级黄片免费播放| 91亚洲人电影| 精品网站99999| 大香蕉日韩欧美| 精品视频一二三中文| 国产精品视频91久久| 黄色AAAAAAAAAAA大片| 天天插天天操| 麻豆国产原创AV色哟哟 | 高清不卡视频| 天天舔天天日天天射| 超碰97久| 岛国A V在线免费看| 人人操人人摸人 | 嫖老熟女A片一二三区| A久久| 午夜欧美神马久久久久| 久久精品操| 亚洲春色欧美激情自拍| 国内毛片无码一级毛片| 欧美狠狠操| 久热精品在线| AA级电影三区| 激情综合网五月婷婷| 久久亚州高清| 亚洲中文sv| 青草草免费网站av| 蜜桃臀av在线观看| 综合91网| 亚洲爽图| 国产福利第一视频| baiduhicn.com。| 东京热毛片177b2viP| 国产欧美岛国精品一区| 四虎影库国产精品免费| 丰满欧美放荡少妇在线| 99re热有精品视频国产| 婷婷五月天伊人| 操曰本熟女| 国产无码三级视频在线观看| 欧美性爱五月天| 亚洲色图伊人网| 日韩综合无码一区久久92| 亚洲国产一区二区三区四区国产| 青青青青草av在线观看| 欧美亚洲图片| 色婷婷丁香| 亚洲性感丝袜诱惑在线观看| 2024黄色视频| 人妻中文在线| 蜜桃臀一区二区三区久久| 国产精品久久久久久久电影渣男| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 这里有精品| 伊人久日| 亚洲成人福利电影免费| 99久久综合| 人人么人人操| 女人的久久久| 婷婷久月| 91国产精品在线看| 东京热毛片调教| 性爱1区| 亚洲精品黑丝| 精品久久久久久中文| 中出789在线视频| 欧美日韩插逼视频| 国产suv精品一区二区四| 午夜精品久久久久久久久久久久久 | 人人操人人肉久久精品| 人人透人人操| 日本 情色 1区2区3区| 国产福利在线视频网站| 97视频900| αⅴ天堂| 久久久久久久久久精| 欧美精品成人在线播放| WWW.加勒比人妻一区不卡.com| 亚洲成人激情小说视频| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 精品视频免费在线一区| 都市激情人妻一区二区青青操视频| 久久丁香久草综合网| 久久欧洲| 日韩欧美大力操| 久久伦理视频久久大香蕉视频| 影视综合无码少妇| 农村妇女精品一区二区| 一类无码操逼视频| 国产精品久久久久久9999| 另类 日韩 熟女| 超碰 国产熟女精品一区| 免费毛片在线播放| 日逼97| 高清不卡国产| 人妻啪| 久久久精品久久| 亚洲欧美中文日韩视频中国语| 久久久久久免费电影| 99热综合| 20cm女自慰在线日韩欧美| 亚洲免费97免费| 天天干夜夜一操| 另类欧美| 亚洲欧美大香蕉| 成年人黄色视频免费| 操死我了嗯嗯嗯| 国产在线视视频有精品| 日韩猛交| 青娱乐大香蕉| 无码高清专| 久久久久久九九九九九| 欧美精品第四五页中文字幕在线观看| 91精品久久久| 婷婷激情丁香| 麻豆区99999| 国语精品内射在线观看| 伊香蕉综合久久久久久久噜噜噜| 亚洲情色婷婷五月天| 韩日性爱av| 欧美丝袜中文字幕07在线| 一个人在线看的黄色电影网站| 中文字幕五月婷婷免费| 亚洲第一男人天堂| 一二三啪啪专区| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 伦伦成年午夜免费视频| 992大香蕉| 国产不卡中文字幕免费avi| 激情久久av一区av二区av| 少妇被c 黄 免费观看| 天天日美女的B| 久久婷婷色综合一区二区三区| 18禁免费视频| 亚洲色图欧美| 亚洲丝袜99| 日韩天堂av电影在线观看| 国产97视频免费观看| 亚洲成a人v欧美综合天堂下载| 蜜桃一区二区三区| 青青草在线成人视频| 国产一区二区欧美日本| 国产免费黄色一级大片| 中文字幕熟女人妻丝袜丝| 日本不卡码黄色| 丁香五月天激情综合| 一起草日韩| 日韩欧美亚洲自拍偷拍| 96一区二区三区| 动漫av中文| 久久久久久亚洲精品中文字幕人妻| 操比国产| 免费人成在线观看网站品爱网| 国产精品第一页国产大屁股视频免费区| 夜夜操中文字幕| 亚洲天堂第一页| 91久久国产综合久久| 爱我干综合| 日本Xx性爱| 久久久精品91八戒| 在线亚洲欧美| 麻豆AV一区二区天美传媒| 色五月激情AV在线| 精品十三区| 无码heyzo高清一区| 丁香六月婷婷综合| 狠狠激情综合狠狠操中文字幕| 精品久久久久久中文字幕三区 | 亚州高清av| 美欧老女人97| 性欧美天天| 在线女人91| 国产精品91一样| 国产精品交换一区二区| 99操逼| 亚洲精品成人| 久久精品国产亚洲AV成人直播| 亚洲熟女性高潮久久久| 超碰人人操97碰| 97人人夜夜精品视频| 国产午夜福利电影免费在线观看| 97欧美超碰| 永久免费观看的毛片的网站| 91丝袜| 夜色91| 91处女在线观看| 人人妻人人玩人人澡人人爽| 欧洲视频在线| 中文区中文字幕免费看| 国产精品久久泡妞网站| 91少妇高潮| 超碰碰97资源站| 久久久久久久91| 熟女人妻一区二区三区免费看 | 精品日日人妻| 日韩性爱视频免费在线| 国产一区二区欧美日本| 深田咏美亚洲精品福利社| 国产热RE99久久6国产精品首| 日韩激情啪啪| 97天堂| 美中韩AV综合网| 一区二区三区四区五区高清无码永久视频 | 综合亚洲欧美精品日韩?v| 美女被啪到深处抽搐视频| 欧美国产精品久久九九| 久操操AV电影| 操逼视频亚洲| 亚洲色综合| 97人肏| 中 文字幕一区二区三四 五 区日 日 骚| 激情综合av| 九草九九九| 国产精品久久久久久久久久久久久久吹 | 青青草啪啪网| 老熟女中文字幕高清| 午夜九九| 亚洲欧洲激情卡通另类文学四射小说网站| 大色综合| 天天操夜夜操狠很操| 女人双腿搬开让男人桶| 成功精品影院| 嗯嗯啊啊用力视频免费| 天天综合网~91综合网| 少妇贴图| 欧美性爱精品七区| 国产区91柔拿会所技师| www.超碰| 国产精品 午夜福利| 操逼无毒无码免费视频| 天堂性色| 三级特黄60分钟播放| 久久激情网| www.99热在线只有精品| 久久女女| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 约操熟妇|