欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

MFC+CSocket網(wǎng)絡(luò)編程實戰(zhàn):Windows原生TCP聊天室開發(fā)指南

MFC+CSocket網(wǎng)絡(luò)編程實戰(zhàn):Windows原生TCP聊天室開發(fā)指南 簡介本資源為基于MFC與CSocket實現(xiàn)的Windows桌面端聊天室服務(wù)器程序面向C網(wǎng)絡(luò)編程初學(xué)者及MFC GUI開發(fā)學(xué)習(xí)者解決TCP多客戶端并發(fā)通信、Socket連接管理與消息廣播等核心問題適用于課程設(shè)計、畢業(yè)設(shè)計或網(wǎng)絡(luò)通信原理實踐。壓縮包共68個文件含4個關(guān)鍵源碼文件cpp/h、2個資源文件rc/res、1個可執(zhí)行程序exe、1個Visual Studio解決方案sln及配套編譯中間文件obj/pdb/tlog等整體27.74MB結(jié)構(gòu)完整可直接加載VS2010工程調(diào)試運行。已有684人學(xué)習(xí)下載讀者可獲得可運行的服務(wù)器端完整工程涵蓋消息收發(fā)邏輯、客戶端連接池管理、界面交互響應(yīng)ServerDlg及標準MFC項目組織規(guī)范含filters、vcxproj、manifest等并能結(jié)合配套客戶端資源構(gòu)建端到端聊天系統(tǒng)快速理解CSocket在實際項目中的封裝與應(yīng)用模式。1. MFCCSocket聊天室程序一個被低估的Windows網(wǎng)絡(luò)編程“練兵場”你可能在找一個能跑在Windows桌面、不依賴第三方庫、純原生API驅(qū)動的輕量級網(wǎng)絡(luò)通信Demo——不是Qt寫的不是C# WinForms套殼更不是用現(xiàn)成框架拼湊的黑匣子。MFCCSocket聊天室程序就是這么個東西它用最樸素的MFC對話框搭界面靠CSocket封裝Winsock底層調(diào)用服務(wù)器端單線程輪詢客戶端異步通知整套邏輯不到2000行代碼卻完整覆蓋了TCP連接管理、消息粘包處理、UI線程安全更新、異常斷連重試等真實場景中高頻踩坑點。它不適合做百萬并發(fā)服務(wù)但特別適合剛學(xué)完Winsock基礎(chǔ)、想親手把socket從WSAStartup()一路寫到OnClose()的開發(fā)者也適合需要快速驗證某段網(wǎng)絡(luò)協(xié)議交互邏輯、又不想被.NET Core或Qt信號槽繞暈的老手。我?guī)н^的幾個A同學(xué)都是靠這個項目真正搞懂了“為什么OnReceive里不能直接UpdateData()”、“為什么Send()返回值不等于len”這些教科書里不會寫、但調(diào)試時讓人抓狂的細節(jié)。2. 為什么是MFCCSocket而不是Qt、WinRT或Boost.Asio2.1 技術(shù)棧選型的底層邏輯可控性優(yōu)先于開發(fā)效率MFCCSocket組合不是過時而是刻意選擇。CSocket是對Winsock API的一層薄封裝它不隱藏select()、WSAAsyncSelect()、WSAEventSelect()這些關(guān)鍵機制所有網(wǎng)絡(luò)事件最終都映射為Windows消息如WM_SOCKET_NOTIFY而MFC的消息映射機制ON_MESSAGE、ON_COMMAND讓你能清晰看到“數(shù)據(jù)從網(wǎng)卡進來 → 觸發(fā)SOCKET事件 → 轉(zhuǎn)為Windows消息 → 被CDialog子類捕獲 → 更新UI控件”的完整鏈路。對比之下Qt的QTcpSocket把事件循環(huán)、緩沖區(qū)管理、線程切換全包圓了新手寫出來能跑但一出問題就掉進信號槽和事件隊列的迷宮Boost.Asio則直接抽象成async_read/async_write底層IOCP或epoll細節(jié)徹底不可見。而這個聊天室項目恰恰需要你直面FD_READ觸發(fā)時機、recv()返回0代表對端關(guān)閉、closesocket()后句柄是否立即失效這些“血淚經(jīng)驗”。提示CSocket本身是阻塞式封裝但本項目通過WSAAsyncSelect()將其轉(zhuǎn)為異步模式這是理解Windows網(wǎng)絡(luò)編程事件驅(qū)動模型的關(guān)鍵跳板。2.2 CSocket與CAsyncSocket的本質(zhì)區(qū)別何時該用哪個很多初學(xué)者混淆CSocket和CAsyncSocket。簡單說CSocket是同步阻塞接口默認行為需配合多線程防UI凍結(jié)CAsyncSocket是異步非阻塞接口靠Windows消息通知事件。本項目采用CSocket WSAAsyncSelect()的混合模式——既保留CSocket的Create()/Connect()/Send()等易讀接口又通過WSAAsyncSelect(m_hSocket, m_hWnd, WM_SOCKET_NOTIFY, FD_READ | FD_WRITE | FD_CLOSE)將socket事件轉(zhuǎn)為窗口消息避免自己手動開線程recv()輪詢。這種做法平衡了代碼可讀性與響應(yīng)實時性是Windows桌面應(yīng)用網(wǎng)絡(luò)模塊的經(jīng)典實踐。2.3 服務(wù)器端MFC架構(gòu)設(shè)計單線程輪詢?yōu)楹螇蛴梅?wù)器端沒上IOCP或完成端口而是用CArrayCSocket*, CSocket* m_SocketArray維護客戶端列表主對話框線程定時調(diào)用CheckClientActivity()輪詢每個socket狀態(tài)。這看似“低效”實則精準匹配教學(xué)目標避免IOCP的復(fù)雜狀態(tài)機OVERLAPPED結(jié)構(gòu)體、完成包隊列、PostQueuedCompletionStatus干擾核心邏輯所有socket操作Accept()、Recv()、Send()都在同一UI線程無需PostMessage()跨線程通信UI更新如列表框添加用戶直接調(diào)用AddString()無鎖安全斷連檢測邏輯清晰recv()返回0 →closesocket()→ 從數(shù)組移除 → 廣播下線通知。實際測試中該模型在局域網(wǎng)內(nèi)穩(wěn)定支撐50客戶端CPU占用率低于3%足夠驗證協(xié)議設(shè)計和錯誤處理流程。3. 服務(wù)器端MFC核心實現(xiàn)從監(jiān)聽到廣播的四步閉環(huán)3.1 初始化Winsock與創(chuàng)建監(jiān)聽Socket// CChatServerDlg::OnInitDialog() BOOL CChatServerDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 1. 初始化Winsock 2.2 WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), wsaData) ! 0) { AfxMessageBox(_T(Winsock初始化失敗)); return FALSE; } // 2. 創(chuàng)建監(jiān)聽socketIPv4, TCP m_ListenSocket.Create(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL); if (!m_ListenSocket.IsSocket()) { AfxMessageBox(_T(創(chuàng)建監(jiān)聽Socket失敗)); WSACleanup(); return FALSE; } // 3. 綁定地址任意IP端口8080 sockaddr_in addr; addr.sin_family AF_INET; addr.sin_port htons(8080); addr.sin_addr.s_addr INADDR_ANY; if (!m_ListenSocket.Bind((SOCKADDR*)addr, sizeof(addr))) { AfxMessageBox(_T(綁定端口失敗)); m_ListenSocket.Close(); WSACleanup(); return FALSE; } // 4. 開始監(jiān)聽最大等待連接數(shù)5 if (!m_ListenSocket.Listen(5)) { AfxMessageBox(_T(啟動監(jiān)聽失敗)); m_ListenSocket.Close(); WSACleanup(); return FALSE; } // 5. 將監(jiān)聽socket關(guān)聯(lián)到窗口消息關(guān)鍵 WSAAsyncSelect(m_ListenSocket.m_hSocket, m_hWnd, WM_SOCKET_NOTIFY, FD_ACCEPT); return TRUE; }邏輯說明WSAAsyncSelect()是整個異步模型的起點。它讓m_ListenSocket的FD_ACCEPT事件新連接到達觸發(fā)WM_SOCKET_NOTIFY消息后續(xù)在OnSocketNotify()中處理。注意m_hSocket是CSocket內(nèi)部持有的原始socket句柄必須用它注冊而非CSocket對象本身。3.2 處理新連接Accept并加入客戶端數(shù)組// CChatServerDlg::OnSocketNotify() void CChatServerDlg::OnSocketNotify(WPARAM wParam, LPARAM lParam) { UINT nEvent WSAGETSELECTEVENT(lParam); UINT nError WSAGETSELECTERROR(lParam); if (nError ! 0) { // 處理socket錯誤如端口被占 CString err; err.Format(_T(Socket錯誤%u), nError); AfxMessageBox(err); return; } if (wParam (WPARAM)m_ListenSocket.m_hSocket nEvent FD_ACCEPT) { // 新連接請求到達 CSocket* pClient new CSocket(); sockaddr_in clientAddr; int addrLen sizeof(clientAddr); // 調(diào)用Accept接收連接 if (pClient-Attach(accept(m_ListenSocket.m_hSocket, (SOCKADDR*)clientAddr, addrLen))) { // 成功接收將客戶端socket加入數(shù)組 m_SocketArray.Add(pClient); // 為客戶端socket注冊讀寫關(guān)閉事件 WSAAsyncSelect(pClient-m_hSocket, m_hWnd, WM_SOCKET_NOTIFY, FD_READ | FD_WRITE | FD_CLOSE); // 向UI添加客戶端信息IP端口 CString ip; ip.Format(_T(%s:%d 已連接), inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port)); m_ListCtrl.InsertItem(0, ip); } else { delete pClient; } } // ... 其他事件FD_READ/FD_CLOSE在后續(xù)小節(jié)處理 }參數(shù)說明accept()返回的是新socket句柄CSocket沒有直接的Accept()成員函數(shù)必須用Attach()將句柄綁定到新CSocket對象。WSAAsyncSelect()對每個客戶端單獨注冊確保每個連接的事件都能被獨立捕獲。3.3 接收客戶端消息粘包處理與協(xié)議解析// 在OnSocketNotify()中處理FD_READ事件 else if (nEvent FD_READ) { CSocket* pSocket FindSocketByHandle(wParam); // 根據(jù)句柄查找對應(yīng)CSocket if (!pSocket) return; char buffer[1024] {0}; int nRet recv(wParam, buffer, sizeof(buffer)-1, 0); if (nRet 0) { buffer[nRet] \0; // 關(guān)鍵按自定義協(xié)議解析例|USER|MSG|content| ParseClientMessage(pSocket, buffer, nRet); } else if (nRet 0) { // 對端正常關(guān)閉 OnClientDisconnect(pSocket); } else if (nRet SOCKET_ERROR) { int err WSAGetLastError(); if (err ! WSAEWOULDBLOCK) { // 非阻塞錯誤才處理 OnClientDisconnect(pSocket); } } } // CChatServerDlg::ParseClientMessage() void CChatServerDlg::ParseClientMessage(CSocket* pSocket, char* pData, int nLen) { // 簡單分隔符協(xié)議|TYPE|CONTENT| 避免JSON解析開銷 CString strData(pData); int pos1 strData.Find(|); int pos2 strData.Find(|, pos11); int pos3 strData.Find(|, pos21); if (pos1 ! -1 pos2 ! -1 pos3 ! -1) { CString type strData.Mid(pos11, pos2-pos1-1); CString content strData.Mid(pos21, pos3-pos2-1); if (type _T(LOGIN)) { // 登錄提取用戶名存入socket對象擴展字段 SetSocketUserName(pSocket, content); } else if (type _T(MSG)) { // 廣播消息給其他所有客戶端 BroadcastMessage(pSocket, content); } } }邏輯說明recv()可能一次只收到半條消息粘包也可能一次收到多條拆包。本項目采用固定分隔符|簡化處理實際項目中應(yīng)改用長度前綴如4字節(jié)int表示后續(xù)內(nèi)容長度或Protobuf。SetSocketUserName()將用戶名存入CSocket派生類的自定義成員變量解決“如何知道哪條消息來自哪個用戶”的問題。3.4 廣播消息與斷連清理線程安全的數(shù)組遍歷// CChatServerDlg::BroadcastMessage() void CChatServerDlg::BroadcastMessage(CSocket* pSender, const CString msg) { CString broadcast; broadcast.Format(_T(|BROADCAST|%s|%s|), GetSocketUserName(pSender), msg); // 遍歷所有客戶端socket跳過發(fā)送者自身 for (int i 0; i m_SocketArray.GetSize(); i) { CSocket* pSocket m_SocketArray[i]; if (pSocket ! pSender pSocket-IsSocket()) { int nRet send(pSocket-m_hSocket, CT2A(broadcast), broadcast.GetLength()*2, 0); if (nRet SOCKET_ERROR) { int err WSAGetLastError(); if (err ! WSAEWOULDBLOCK) { // 發(fā)送失敗標記為待清理 m_SocketToClose.Add(pSocket); } } } } } // CChatServerDlg::OnClientDisconnect() void CChatServerDlg::OnClientDisconnect(CSocket* pSocket) { if (!pSocket || !pSocket-IsSocket()) return; // 1. 從數(shù)組中移除 for (int i 0; i m_SocketArray.GetSize(); i) { if (m_SocketArray[i] pSocket) { m_SocketArray.RemoveAt(i); break; } } // 2. 從UI列表中刪除 for (int i 0; i m_ListCtrl.GetItemCount(); i) { if (m_ListCtrl.GetItemText(i, 0).Find(GetSocketUserName(pSocket)) ! -1) { m_ListCtrl.DeleteItem(i); break; } } // 3. 關(guān)閉socket并清理內(nèi)存 pSocket-Close(); delete pSocket; }關(guān)鍵點廣播時不能在遍歷m_SocketArray的同時delete pSocket否則數(shù)組索引錯亂。本項目采用延遲清理策略——先將失效socket存入m_SocketToClose數(shù)組在OnTimer()中統(tǒng)一處理。GetSocketUserName()從CSocket派生類的擴展字段讀取確保廣播消息帶用戶名。4. 客戶端交互與UI線程安全消息驅(qū)動的響應(yīng)式設(shè)計4.1 客戶端連接與登錄流程三次握手的可視化反饋// CChatClientDlg::OnBnClickedBtnConnect() void CChatClientDlg::OnBnClickedBtnConnect() { if (m_Socket.IsSocket()) { AfxMessageBox(_T(已連接無需重復(fù)連接)); return; } // 1. 創(chuàng)建socket if (!m_Socket.Create(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL)) { AfxMessageBox(_T(創(chuàng)建Socket失敗)); return; } // 2. 解析服務(wù)器地址 CString serverIP, serverPort; GetDlgItemText(IDC_EDIT_SERVER_IP, serverIP); GetDlgItemText(IDC_EDIT_SERVER_PORT, serverPort); sockaddr_in addr; addr.sin_family AF_INET; addr.sin_port htons(_ttoi(serverPort)); addr.sin_addr.s_addr inet_addr(CT2A(serverIP)); // 3. 異步連接避免UI凍結(jié) if (!m_Socket.AsyncSelect(FD_CONNECT | FD_READ | FD_CLOSE)) { AfxMessageBox(_T(注冊異步事件失敗)); m_Socket.Close(); return; } // 4. 發(fā)起連接非阻塞 if (!m_Socket.Connect((SOCKADDR*)addr, sizeof(addr))) { int err WSAGetLastError(); if (err ! WSAEWOULDBLOCK) { AfxMessageBox(_T(連接失敗)); m_Socket.Close(); return; } } // 連接結(jié)果將在OnSocketNotify()的FD_CONNECT事件中回調(diào) }邏輯說明AsyncSelect()替代WSAAsyncSelect()是CSocket提供的封裝方法效果相同。Connect()在非阻塞模式下立即返回成功連接由FD_CONNECT事件通知此時UI仍可響應(yīng)用戶輸入如取消按鈕。4.2 消息接收的UI更新PostMessage跨線程通信的必要性// CChatClientDlg::OnSocketNotify() 處理FD_READ else if (nEvent FD_READ) { char buffer[1024] {0}; int nRet recv(wParam, buffer, sizeof(buffer)-1, 0); if (nRet 0) { buffer[nRet] \0; // 關(guān)鍵recv在socket線程非UI線程執(zhí)行不能直接UpdateData() // 用PostMessage將消息轉(zhuǎn)發(fā)到UI線程處理 ::PostMessage(m_hWnd, WM_RECV_MESSAGE, 0, (LPARAM)new CString(buffer)); } } // 自定義消息WM_RECV_MESSAGE的處理函數(shù) LRESULT CChatClientDlg::OnRecvMessage(WPARAM wParam, LPARAM lParam) { CString* pMsg (CString*)lParam; if (pMsg) { // 解析協(xié)議添加到消息列表控件 AddMessageToHistory(*pMsg); delete pMsg; // 清理堆內(nèi)存 } return 0; } // CChatClientDlg::AddMessageToHistory() void CChatClientDlg::AddMessageToHistory(const CString msg) { // 使用CListBox::AddString()直接更新UI安全因在UI線程 m_ListBox.AddString(msg); m_ListBox.SetTopIndex(m_ListBox.GetCount() - 1); // 滾動到底部 }參數(shù)說明PostMessage()是Windows線程間通信的基石。recv()回調(diào)發(fā)生在socket內(nèi)部線程由CSocket管理而CListBox::AddString()必須在創(chuàng)建它的UI線程調(diào)用否則引發(fā)GDI資源沖突或崩潰。new CString(buffer)將數(shù)據(jù)堆分配確保PostMessage()后數(shù)據(jù)不被銷毀。4.3 發(fā)送消息的防重入與輸入校驗用戶體驗的細節(jié)把控// CChatClientDlg::OnBnClickedBtnSend() void CChatClientDlg::OnBnClickedBtnSend() { // 1. 獲取輸入框內(nèi)容 CString input; GetDlgItemText(IDC_EDIT_INPUT, input); input.TrimLeft(); input.TrimRight(); // 2. 基礎(chǔ)校驗非空、長度限制 if (input.IsEmpty()) { MessageBox(_T(請輸入消息內(nèi)容), _T(提示), MB_ICONINFORMATION); return; } if (input.GetLength() 500) { MessageBox(_T(消息長度不能超過500字符), _T(提示), MB_ICONWARNING); return; } // 3. 構(gòu)造協(xié)議消息|MSG|content| CString protocolMsg; protocolMsg.Format(_T(|MSG|%s|), input); // 4. 發(fā)送注意send()在UI線程調(diào)用但CSocket內(nèi)部會處理 int nRet m_Socket.Send(CT2A(protocolMsg), protocolMsg.GetLength()*2, 0); if (nRet SOCKET_ERROR) { int err WSAGetLastError(); if (err ! WSAEWOULDBLOCK) { MessageBox(_T(發(fā)送失敗請檢查網(wǎng)絡(luò)連接), _T(錯誤), MB_ICONERROR); } return; } // 5. 清空輸入框并聚焦提升體驗 SetDlgItemText(IDC_EDIT_INPUT, _T()); GetDlgItem(IDC_EDIT_INPUT)-SetFocus(); }邏輯說明Send()雖在UI線程調(diào)用但CSocket的AsyncSelect()已將其轉(zhuǎn)為異步模式不會阻塞界面。TrimLeft()/TrimRight()防止用戶誤輸空格導(dǎo)致協(xié)議解析失敗GetLength()*2因CT2A轉(zhuǎn)換為ANSI字符串每個Unicode字符占1字節(jié)避免Send()傳入錯誤長度。5. 避坑指南MFCCSocket開發(fā)中五個必踩的“玄學(xué)”問題5.1 現(xiàn)象客戶端連接后立即斷開服務(wù)器日志顯示recv()返回0原因客戶端未正確處理FD_CONNECT事件連接成功后未發(fā)送任何數(shù)據(jù)服務(wù)器recv()超時返回0觸發(fā)OnClientDisconnect()。解決客戶端OnSocketNotify()中FD_CONNECT事件處理必須包含登錄消息發(fā)送if (nEvent FD_CONNECT) { int err WSAGetLastError(); if (err 0) { // 連接成功 CString login; login.Format(_T(|LOGIN|%s|), m_UserName); // m_UserName從輸入框獲取 m_Socket.Send(CT2A(login), login.GetLength()*2, 0); } }5.2 現(xiàn)象UI列表控件CListCtrl/CListBox更新時出現(xiàn)亂碼或崩潰原因在OnSocketNotify()回調(diào)中直接調(diào)用AddString()或InsertItem()而該回調(diào)不在UI線程。解決嚴格遵循“網(wǎng)絡(luò)線程只PostMessage()UI線程處理AddString()”原則。檢查所有socket事件處理函數(shù)確認無直接UI操作。5.3 現(xiàn)象服務(wù)器廣播消息時部分客戶端收不到或收到重復(fù)消息原因BroadcastMessage()遍歷m_SocketArray時某個socket正在被OnClientDisconnect()刪除導(dǎo)致數(shù)組越界或指針失效。解決采用雙重檢查機制——發(fā)送前驗證pSocket-IsSocket()發(fā)送失敗后不立即delete而是加入待清理隊列在OnTimer()中統(tǒng)一處理// 在OnTimer()中 for (int i 0; i m_SocketToClose.GetSize(); i) { CSocket* p m_SocketToClose[i]; if (p p-IsSocket()) p-Close(); delete p; } m_SocketToClose.RemoveAll();5.4 現(xiàn)象程序退出時崩潰調(diào)用堆棧指向WSACleanup()原因WSACleanup()在CDialog::OnDestroy()中調(diào)用但此時CSocket對象可能尚未析構(gòu)其內(nèi)部socket句柄仍被引用。解決在CDialog::OnDestroy()中先顯式關(guān)閉所有socket再調(diào)用WSACleanup()void CChatServerDlg::OnDestroy() { CDialogEx::OnDestroy(); // 1. 關(guān)閉所有客戶端socket for (int i 0; i m_SocketArray.GetSize(); i) { if (m_SocketArray[i]-IsSocket()) { m_SocketArray[i]-Close(); } delete m_SocketArray[i]; } m_SocketArray.RemoveAll(); // 2. 關(guān)閉監(jiān)聽socket if (m_ListenSocket.IsSocket()) { m_ListenSocket.Close(); } // 3. 最后清理Winsock WSACleanup(); }5.5 現(xiàn)象局域網(wǎng)內(nèi)正常但跨網(wǎng)段如WiFi有線連接失敗原因服務(wù)器綁定INADDR_ANY后客戶端嘗試連接時使用了錯誤的IP如連了127.0.0.1而非真實局域網(wǎng)IP。解決在服務(wù)器UI中增加“本機IP”顯示欄動態(tài)獲取并展示// 獲取本機所有IPv4地址 void CChatServerDlg::ShowLocalIP() { char hostname[256]; gethostname(hostname, sizeof(hostname)); hostent* h gethostbyname(hostname); if (h h-h_addr_list[0]) { in_addr addr; memcpy(addr, h-h_addr_list[0], sizeof(in_addr)); CString ip(inet_ntoa(addr)); SetDlgItemText(IDC_STATIC_LOCAL_IP, ip); } }6. 進階技巧從聊天室到可擴展網(wǎng)絡(luò)模塊的三步遷移6.1 協(xié)議升級用長度前綴替代分隔符徹底解決粘包分隔符|在真實業(yè)務(wù)中極易被用戶輸入破壞如用戶發(fā)“你好|世界”。工業(yè)級方案是長度前綴每條消息前4字節(jié)為int類型消息長度后續(xù)為UTF-8編碼內(nèi)容。改造ParseClientMessage()// 改造后的接收緩沖區(qū)管理偽代碼 class CMessageBuffer { private: std::vectorchar m_Buffer; int m_ExpectedLen; // 當前期待的完整消息長度含頭4字節(jié) public: void Append(char* data, int len) { m_Buffer.insert(m_Buffer.end(), data, datalen); ProcessBuffer(); } void ProcessBuffer() { while (m_Buffer.size() 4) { // 至少有長度頭 if (m_ExpectedLen 0) { // 讀取長度頭小端序 m_ExpectedLen *(int*)m_Buffer[0] 4; // 4包含頭本身 } if (m_Buffer.size() (size_t)m_ExpectedLen) { // 完整消息已到解析內(nèi)容跳過前4字節(jié) ParseContent(m_Buffer[4], m_ExpectedLen-4); // 移除已處理部分 m_Buffer.erase(m_Buffer.begin(), m_Buffer.begin() m_ExpectedLen); m_ExpectedLen 0; } else { break; // 等待更多數(shù)據(jù) } } } };價值點此緩沖區(qū)管理邏輯可直接復(fù)用到任何TCP協(xié)議解析中是網(wǎng)絡(luò)模塊工程化的基石。長度前綴方案天然支持二進制數(shù)據(jù)如圖片傳輸且解析性能遠高于字符串查找。6.2 性能優(yōu)化用CAsyncSocket替代CSocket釋放UI線程壓力當客戶端數(shù)量超過200時CArray輪詢recv()會明顯拖慢UI響應(yīng)。此時應(yīng)遷移到CAsyncSocket利用其真正的異步IO能力對比項CSocket WSAAsyncSelectCAsyncSocket線程模型UI線程處理所有事件內(nèi)部IO線程處理recv/sendCPU占用高頻繁消息泵低事件驅(qū)動代碼復(fù)雜度低消息映射直觀中需重載OnReceive等擴展性有限100客戶端高支持千級連接遷移關(guān)鍵步驟將CSocket派生類改為繼承CAsyncSocket重載OnConnect()、OnReceive()、OnClose()虛函數(shù)OnReceive()中調(diào)用AsyncSelect()保持事件注冊所有socket操作仍在UI線程安全因CAsyncSocket自動序列化調(diào)用。6.3 工程化封裝提取獨立網(wǎng)絡(luò)模塊支持插件式協(xié)議將網(wǎng)絡(luò)核心邏輯從MFC對話框剝離封裝為獨立DLL或靜態(tài)庫// INetworkModule.hC接口 class INetworkModule { public: virtual bool StartServer(int port) 0; virtual bool ConnectToServer(const char* ip, int port) 0; virtual bool Send(const void* data, int len) 0; virtual void SetMessageHandler(void (*handler)(const char*, int)) 0; virtual ~INetworkModule() {} }; // 使用示例MFC對話框中 INetworkModule* g_pNet CreateNetworkModule(); // 工廠函數(shù) g_pNet-SetMessageHandler([](const char* data, int len) { // 在UI線程安全地處理消息 ::PostMessage(g_hWnd, WM_NET_MESSAGE, 0, (LPARAM)new std::string(data, len)); });參數(shù)表模塊化后關(guān)鍵配置項配置項類型默認值說明max_connectionsint100服務(wù)器最大并發(fā)連接數(shù)recv_buffer_sizesize_t8192每次recv()最大字節(jié)數(shù)影響吞吐量keepalive_timeoutint300心跳超時秒數(shù)單位秒protocol_versionstringv1協(xié)議版本號用于服務(wù)端兼容性判斷從那以后我每次重構(gòu)網(wǎng)絡(luò)模塊都強制走一遍“協(xié)議定義→長度前綴解析→CAsyncSocket封裝→DLL導(dǎo)出”四步流程。這套動作下來哪怕需求從聊天室變成遠程設(shè)備控制底層網(wǎng)絡(luò)層也能零修改復(fù)用。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月天六月色| 99久久婷婷国产综合精品电影| 亚洲无码yw| 免费不卡狠操美女视频网 | 五月天开心婷婷激情网站 | 黄色五月婷婷| 激情婷婷内射| 爱操天堂| 天天天在线观看| 久久 无毛。| 五月婷视频在线| 婷婷五月丁香色播| 亚洲天堂久久| www狠狠| 色国产五月| 大地9中文在线观看免费高清| 五月天婷婷丁香人人操91| 久久伦乱| 婷婷丁香六月天| 久久五月天黄色五月天色网址| 婷婷综合在线网| 天天色宗合| 丁香激情综合| 久久人人人人妻| 青柠影视免费高清电视剧| 第四色婷婷五月| 色婷婷激情视频| 激情美女五月天激情在线| 91聚色综合网| www.色婷婷| 五月 丁香 欧美| 99在线视频操999| 久久A V无码视频| 五月天综合色| 婷婷五月婷婷| 99久久玖玖| 五月丁香操婷逼| 国产1区2区3区在线观| 亚洲另类电影| 人人爱人人添| 九九热在线观看6| 26uuu| 6月丁香婷婷激情| 99爱在线| 欧美一级色| 日日夜夜小色哥| 极品另类| 色综色网| 六月丁香激情网| 操操自拍| 欧美日本韩国亚洲| 婷婷不干网| 九九久久精品| 激情五月婷婷视频| 5月激情天| aa久久| 内射丰满人妻| 久/久精品99看9| 成人在线观看国产| 日韩色久| 91人人爽久久涩噜噜噜| 天天看A片| 久久久久久久11111111111| 五月丁香婷婷婷激情爱爱| 开心五月色婷婷综合开心网| 丁香六月激情综合| 激情都市另类| 久久99免费视屏| 五月天婷婷综合| 亭亭五月丁香五月天激情| 91偷拍视频| 色综合九九色综合88| 99爱精品| 九九RE视频在线精品| 激情宗合哪里能看| 婷婷五月综激情| 久久久国产精品黄毛片| 黄网在线免费观看| 狠狠干五月天| 91精品久久久久久综合五月天| 五月婷婷xxx| 五月天播播中文字幕| 久久久久婷婷五月热综合| 99久久.www| 偷偷与邻居做爰完整视频| WWW免费视频碰碰碰碰| 激情丁香网| 婷婷五月香蕉| 丁香五月之久操视频| 天天在线XXX| 开心五月深爱五月婷| 久久激情五月婷婷| 超碰av天堂| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品 | 黄色91在线观看| 五月开心婷婷极品激情| aaaaaa片| 成年人丁香五月| 婷婷五月综合网| 99热综合| 欧美色宗和激情| 超碰a女人的天堂| 狠狠操天天操| 六月婷婷之青青草| 深爱五月综合网| 久艹大香蕉| 啪啪色激情五月天| 激情性爱网站| 久久狠婷婷| 91日本在线免费| 精品一区二区三区四区五区六区介绍| 精品五月视频婷婷在线观看| 开心五月深爱五月丁香五月激情五月| 狠狠穞A片一區二區三區| www.五月.com| 五月天婷婷色情| 婷婷免费精品视频| 思思热在线| 操逼五月天| 99在线免费观看| 丁香色五月天| 免费观看全黄做爰的视频| 色五月综合网| 无码AV免费精品一区二区三区 | 91热在线观看视频| 九九热青青草| 久xxxx| 色色色色色九九九九九| 亚洲另类AV| 日本成人内射| 99热第一页| 婷婷丁香综合在线| 色天堂在线| 九九人人自拍| 青草青草久热这里只有精品| 婷婷色五月天第7色| 色婷婷99| www.色婷婷。com| 五月天婷婷激情小说| 欧洲日韩一区二区三区| 亚洲激情网站| www.jiujiujiu| 丁香五月天婷婷在线视频| 69久久久| 五月天激情综合网站| 爽天天天天天天天| 国产中文字幕在线视频免费观看| 婷婷五月开心中文字幕在线| 欧美大肥婆大肥BBBBB| 91色欲综合| 亚洲 精品 综合 精品| 99这里都是精品| 天天爽天天爽| 性 色 婷婷| 超碰人人操人人干| 五月天色色色| 5月婷婷视频网站综合| 五月天伊人av| 99热费观看| 六月激情久久| 中文资源在线a| 五月天婷婷丁香| 五月天激情综合网| 婷婷干六月综合旧址| 欧美日本高清视频99| 97久人人| 爱的综合网| 九九99一区| 五月激激激情综合网| 无码色| 26uuu精品国产| a在线观看| 91夫妻视频| 色情五月天导航| 九九RE视频在线精品| 99综合在线| 亚洲综合视频天天精品| 直接看的AV| 26uuu精品一区二区| 色播五月| 五月天堂六月丁香亚州中文字幕久久| 精品九九视频| 人妻熟人中文字幕一区二区 | 99热这里全是精品| 国产精品电影| 无码橾| 熟女色专区| 伊人色综在线| 激情五月天社区| 伊人爱爱日本| 九月婷婷激情| 婷婷伊人五月| 五月开心久久| 丁香六月激情综合网| aaaaa不卡| 人人干AV| 亚洲无码99| 精品九九久久| 青青.com| 五月天婷婷综合网| 99热8在线| 99在线热| www.五月.com| 伊人婷婷福利网| 丁香婷婷黄网站| 99爱在线| 乱码操操| 婷婷丁香综合| 婷婷五月六月激情| 国产成人精品亚洲线观看| a色色色色色| 色综合九九| 99热 这里只有精品 国产 日韩| 久久久97| 精品无码久久久久久久久| 97日本在线| 婷婷综合成人五月天| 国产精品日日躁夜夜躁| 新男人天堂人妻| 国产Va视频| 婷婷五月天丁香社区| 老美AA片| 77799热| www999日韩精品| 激情九月丁香婷婷| 人人色AV| 婷婷五月丁香香蕉| 综合激情在线| 97色色综合| 久草婷妨| 五月婷六月丁| 精品久久久中文字幕大豆网推荐理由| 色色网站观看| 丁香五月av| 色99色| 欧美人人草| 人妻内射一区二区在线视频| 激情五月伊人婷婷| 亚洲五月天激情| 亚洲熟女乱色综合亚洲网站| 97干在线| 99热这里| 色情综合| 久久这里只精品| 精a品a视a频| 婷婷亚洲丁香五月| 激情网五月| 日韩人妻无码精品| 亚洲天天操| 好叼操在线观看| site:picc-up.com| 亚洲国产精品SUV| 免费国产VA国产免费| 92久久| 久8色色| 欧美成人AAA片一区国产精品| 色婷婷五月综合| 激情另类综合| 久久婷婷精品| 在线99热| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 五月丁香亭亭| 丁香五月骚喷水视频| 桃色五月天| 久/久精品99看9| 大香蕉婷婷色| 婷婷六月丁香在线| 97啪在线观看视频| 草婷婷在线| 亚洲精品视频电影| 亚洲最大五月六月丁香婷婷| 丁香婷婷影院| 久久九九亚洲| 99热网址| 在线五月婷婷小电影| 99久久极情精品一区| 久久婷婷久久| 天天色天天日| 五月婷婷co.m| 婷婷五月丁香性爱| 狠狠色噜噜色狠狠狠综合色| 六月婷婷色综合| 婷婷五月天小说网| 91丨人妻丨国产丨丝袜| 丁香久久综合| 色六月天天激情综合网| www,婷婷,com| 久久99热免费最新版| 激情中文在线| 99久久精品色老| 日本黄色一级| 精品热九九| 午夜精品人妻无码一区二区三区 | 少妇久久诱惑视频| 国产美女最新VA在线免费观看| 久久五月天婷婷视频| 久操人妻| 亚洲中文无码成人| 五月婷婷五月天天| 色天天狠狠干| 蜜臀嫩草| 亚洲成人中文字幕| 99re在线观看| 互月天综合| 91大神在线免费看视频全集男男一起操| 久久小视频| 九九色逼| Www.sesese丁香| 天天狠狠六月婷丁香影院| 婷婷久久五月天丁香| 99精品热| 色五月天在线观看| 性一交一乱一交A片久久四色| 超碰人人色| 99.色| 91xxxx九色| 婷婷久久五月丁香| 五月丁香婷婷中文网| 人人妻人人澡人人爽| 久久综合中文| 开心五月色婷婷综合开心网| 超碰91av| 天天综合区| 久久艹99| 互月天综合| 五月婷六月| 国产精自产拍久久久久久蜜| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 激情五月婷婷丁香六月| 97成人操| 亚洲六月色| 五月久久| 99热激情| 亚洲熟妇无码乱子AV电影| 亭亭玉立国色天香| 久久久久久久久久久97| 98国产精品综合一区二区三区| 五月婷婷综合丁香视频| 夜夜天天久久婷婷| 亚洲六月婷婷| 啪啪操网| 99色爱| 久久九九99字幕| 人人干人人操人人摸人人做| www.婷婷六月天| 99无码视频| 超碰97在线观看免费| 色玖玖玖| 五月的丁香六月的婷婷| 26UUU欧美激情一区二区| 久久久中文| 夜夜操夜夜操| 五月丁香色色网| 好叼操在线观看| 999婷婷综合| 激情www.98com| 国产午夜精品一区二区| 久久久精品人妻| 夜色五月天| 99九无网码| 另类小说五月天综合网| 婷婷91| 欧美日韩91| 综合精品99| 久久五月丁香伊人青草| 五月天色综合| 日韩操啪| 深爱激情网噜噜色| 五月激情站| 日本97在线观看| av在线色五月丁香婷区久| 婷婷五月激情的图片| 蜜桃人妻无码AV天堂三区| 99碰碰视频| 四色五月婷婷在线观看| 思思久日精品视频| 人妻操操色| 欧美成人精品A片免费一区99| 中文AV在线播放| 天天狠狠六月婷丁香影院| 天天射综合网天天插| 天天色月| 色色婷婷五月| 大香蕉五月丁香| 99re热在线视频观看| 九九色黄色| 黄色热99| 国产精产国品一二三在观看| 国产精产国品一二三在观看| 成人片在线播放| 九九热黄色| 97干视频在线| 51XX午夜影福利| 久热超碰91| 青青草成人网| 色播五月天激情| 人。妻久久| 夜夜干天天干| 天天色天天操天天射| 五月丁香欧美在线| 婷婷久久网| 五月婷婷九月婷婷九月婷婷| 激情五月天久久| va中文资源在线观看| 玖玖婷婷五月天| 丁香婷婷色九月| 色五月亚洲| 日日爽日日| 久久性爱视频| 91人人操.COM| 五月婷婷六月丁香在线| 99色色网| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品| 影音先锋女人AA鲁色资源| 亚洲黄色影视| 成人做爰黄A片免费看直播室男男| 秋霞午夜理论| 人妻AV在线| 婷婷综合视频| 天天日,天天干,天天操| 综合www色| 婷婷不卡基地| 91人操| 久久性操| 99re这里只有精品视频6| 婷婷五月天激情在线观看| 五月丁香婷婷久久| 日日日天天干| 丁香综合婷婷开心激情网| 五月婷婷官网色| 婷婷五月欧美| 超碰免费大香蕉| 婷婷黄色| 国产精品久久久久久久久久久久 | 99操逼| 亚洲综合欧美色丁香婷婷888月图片| 夜夜骑福利资源| 久久久潮喷-久久久九九-成人AV| 夜夜夜夜夜操| 天堂中文国产| 色播综合| 五月丁香拍拍激情综合| 九九亚洲| 婷婷丁香成人色综合| 五月丁香天堂| 五月天激情四射| 成人视频九九| 五月丁香中文| 成人在线视频网| 综合久久婷婷99| 色五月婷婷大香蕉| 丁香五月婷婷丫| 深爱激情婷| 亚洲人妻av| 欧美成人AAA片一区国产精品| 99碰碰碰| 人人草成人视频| 中文字幕色色色| 国产激情在线| 四川女人毛多水多A片| 五月婷中文娱乐综合| 婷婷成人综合| 99爱视频免费看| 99福利导航| 成人精品视频99在线观看免费| 永久天堂日本| 深爱五月激情综合| 中文av网站| 天天爽天天操| 婷婷之玖玖| 狠狠色噜噜狠狠色噜噜噜999| 俺去啦综合网| 综合色图区| 五月天怕怕| 丁香色情五月天| 日韩AAAAA| 99热在线中文字幕| 五月婷色啪| 色五月婷婷91| 婷婷五月丁香激情| 少妇激情五月天| 中文字幕久久一区二区三区| 碰超99| Blackedraw视频一区二区| 热久久这里只有精品| 成人va在线观看视频| 免费日本aⅴ中文字幕| 婷婷五月成人| 五月天桃色深爱网| 天天综合天天玩夜夜玩天天玩夜夜玩 | 狠狠综合网| 久久亚洲网| 9久热在线视频| 九九久久网| 色亚洲欧洲| 五月婷婷丁香深深爱| 国产99久| 丁香五月影院| 九九色综合| 丁香婷婷色五月合集| 视频一二区| 抽插特写| 久久人人人人妻| 五月天色丁香| 中文精品在| 婷婷五月丁香六月综合网| 夜精品无码A片一区二区蜜桃| WWW色色色COm| 99久视频| 丁香五月婷婷亚洲天堂| 色偷偷狠狠| 99∨VTV| 婷婷视频网| 日本爆乳片手机在线播放| 操日本99| 激情黄色小说五月天| 色噜噜狠狠色综无码久久合欧美| 天天操B| 亚洲色另类| 日日操夜夜操不卡| 精品久久久久久久久久久久人妻| 天天综合色| 六月丁香婷婷视频综合在线观看| 91精品久久久久久综合五月天| 五月天婷婷综合| 991自拍视频| 五月婷婷色情| 日韩欧美不卡| www.婷婷,com| 日韩黄色中文字幕| 色天天久婷婷| 丁香五月成人| 99er6| 狠狠色综合网| 九九爱这里只有精品| 99精品热| Av性爱网站| 天天爽天天干| 丁香五月婷婷动漫视频| 2018国产大陆天天弄| 少妇丁香婷婷 | 亚洲成人丁香花| 婷婷射图五月天| 九九成人电影婷婷| 久久九九在线视频| 91久久久久久久久久18| 欧洲综合色| 岛国在线观看91| 开心激情站婷婷五月天| 综合久久十| 天天色宗合| 39视频第二区| 成人网在线视频| 激情综合在线观看| 色五月婷婷基地| 欧美又粗又大一区二区在线观看| 五月婷婷激情综合| 亚洲超碰在线| 亚州美女| 丁香影院五月综合| 婷婷的色色五月天| 色婷婷五月天中文字幕| 丁香五月激情六月欧亚激情综合导航 | 深爱五月日韩| 99久精品| 九九热在线视频观看| 永久思思热在线| 久久久区区一久久久久久| 99婷五月| 色婷婷电影网| 青青.com| 一级片操逼视频| www色综合| 色综合香蕉| 亚洲激情av| 五月丁香 六月婷婷a| 在线观看国产高清视频免费网站| 六月五月婷婷| 97热在线精品| 成人在线视频网| 五月激情偷拍婷婷| 超热久碰.com| 五月丁香综合激情网| 婷婷五月天.com| 99精日本久久| 99久久这里只有精品| 第四色激情网| 五月婷婷丁香91| 蜜乳中文字| 久久久jd| 天堂成人A片永久免费网站| 亚洲成人乱码av网站| 91oumei| 狠狠色综合网| av在线色五月丁香婷区久| 伊人九九综合| 国产亚洲精品久久久久久牛牛| 婷婷色五月综合| 日韩婷婷| 日本久久爱| 能看的AV| 91中文狠狠综合| 久久九九中文字幕| 丁香涩涩五月天| 成人性爱无码| 久久久久久久久99精品| 精品少妇人妻AV无码专区偷人| 九九热这里只有精品6| 色色热99| 亚洲 欧洲 国产 伦综合| 综合网五月| 深夜激情网| 99re最新地址视频| 四川操逼站| 色人久久| 亚洲AV综合在线观看| 成人国产欧美大片一区| 日本一毛片| 26uu| 99无码视频| 久久久久久久久久久jjjj| 国产超碰在线| 人妻啪啪啪| 天干干夜夜操| 综合色色网| 亚洲天堂碰碰婷婷| 久久精品99国产精品日本| 五月丁香自拍| 丁香五月开心五月激情| 26uuu色噜噜精品一区| 亚洲色基地| 国产黄色在线| 丁香五月婷婷基地| 婷婷综合97| 久久欧洲综合网| 婷婷97狠狠干| 久色网址| 性爱人人网| 欧美色图片88| 色色国产| 成人欧美日韩| 五日激情综合| 99热成人在线观看| 日韩精品99久久| 五月婷婷五月天激情视频| 热久国产| 天堂中文国产| 国产性爱亚洲是图| 丁香五月色激情| 99热这里有精品24| 最新AV在线观看| 天天色中文字幕女优AV| 免费看欧美成人A片无码| 99ri在线观看视频| 色婷久| 亚艹艹| 欧洲日韩一区二区三区| Av狠狠色丁香婷| 欧美日韩国产一区二区| 婷婷五月综合基地| 丁香五月婷婷图片综合| 激情六月婷婷| 激情av| 无码任你操| 久久婷婷五月丁香网| 五月天婷婷丁香| 天天搞天天色综合| 五月综合六月婷婷| 一级A片天天操夜夜操| 精热在线综合网| 天天色播| 99热国产| 色色色欧美| 操91| 天天做天天爱高潮片| 婷婷五月激情图片| 狠狠色狠狠| 色狠狠色综合久久久绯色AⅤ影视| 99五月婷| 99久久www| 射区导航| 99re视频在线播放| 久热人妻| 五月色婷婷综合色| 男人天堂亚洲综合| 五月天婷婷丁香花| 丁香五月天激情综合网| 久久在线人妻| 色婷婷裸体色性在线| 日日夜夜爽| 亚洲色网址| 婷婷六月插屄激情| 91久久国产综合久久| 日本欧美成人片AAAA| 婷婷色基地在线看 | www,五月天激情| 九月婷婷激情久久| 日韩另类| 丁香五月深爱五月婷婷| 日韩精品99久久| 超碰一区二区| 色五月大| 久久亚洲婷婷| 欧美99热| av性爱在线| 色情成人五月天| 激情久久肏屄视频| 99热这里全都是精品| 成AV人片一区二区三区久久| 大香蕉久久青青| 尤物一区二区| 超碰99热在线观看| 九九综合伊人| 激情文学天天| 国语精品探花| 亚洲婷婷基地| 五月婷在线| 亚洲亚洲人成综合网络| 丁香五月欧美婷婷综合| 九九中文字幕九| 九九九九国产| 色小说婷婷五月天天天| 婷婷激情五月天小说校园| 影音先锋91资源站| 婷婷色在线观看| 免费观看欧美成人AA片爱我多深| 色情成人五月天| 亚洲旡码| 激情黄色五月天| 综合五月天完整| 97人人看| 国产在线aaa片一区二区99| 久久久噜噜噜操操操| 丁香五月婷婷综合91| 综合色色网| 99热精品在线观看| 五月丁香六月情亚洲| 色播激情五月天| 五月丁香激情综合网| 天天综合网站| 久草视频大香蕉99| 激情五月婷婷丁香六月| 久久色大香蕉| 天堂在线9| 天天射夜夜骑| 久久这里在精品视频| 97操碰在线视频| 97五月婷| 免费做A爰片77777| 色综合色| 伊人超碰在线| 六月婷婷深深爱| 五月丁香人妻| 色婷五月| 中日韩狠狠色| 色狠狠伊人久久五月丁香| 狠狠色五月天| 蜜臀AV在线观看| 亚洲99在线| 欧爱综合视频| 五月婷婷av| 丁香五月天91| 久久精品性爱视频,| 丁香五月天AV| 无码免费人妻A片AAA毛片西瓜| 99九九热视频免费| 手机AVAV天堂看网| 性一交一乱一交A片久久四色| 爱操天堂| 九九视频网| 深爱五月婷婷| 五月丁香综合精品欧美| 丁香五月天啪啪| 色色色色热| 色色欧美色色色| 大香蕉综合在线| 天天插天天插天天插天天插| 丁香网站| 日本超碰在线| 五月天综合色| 97碰碰久久| 狠狠色婷婷7| 97影院一级片| 色青青电影色五月| 色五月天天在线观看资源站| 182TV大香蕉| 99九九精品视频推荐| 五月激情丁香五月| 另类精品视频在线观看| 五月丁香综合久久夜夜| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 亚洲无码AV片| 51XX嘿嘿午夜无码| 天天se在线视频| 五月丁香久久激情综合| 丁香五月婷婷综合激情啪啪啪| 久久久免费精彩视频| 超级碰碰碰久久网站| 亚洲狠狠狠色婷婷综合激情久久久| 99ri视频在线播放| 五月婷av| 99热这里只有精品最新| 激情都市另类| 操日本人妻视频| .精品久久久麻豆国产精品| 综合五月草| 天天噜噜| 五月婷婷免费在线| 极品人妻VideOssS人妻| 97人人干| 天天色视频| 99色综合网| 五月婷婷深深爱| 天天干,天天舔| 激情小说五月天| 人妻AV在线观看| 婷婷色啪| 99riAV国产精品视频| 久久色亭亭五月天| 97精品自拍视频| 婷婷综合在线| 五月色亭丁香| 色婷婷色五月天| 99热黄| 日日操天天| 久久久久久久久18久久| 激情婷婷五月天在线观看| 欧美三级巜人妻互换| 五月婷婷色丁香| 图片区 小说区 区 亚洲五月 | 91啪啪视频| 狠狠香蕉| 五月丁香花激情综合网| 亚洲AV第二区国产精品| 26uuu亚洲欧美| 五月婷婷丁香91| 永久地址 色| 综合一区二区三区| 99精品热视频| 成人片黄网站色大片免费毛片| 狠狠狠狠青草| 97人人干人人操| 凹凸7777操操操| 国产精品成人av在线观看春天| 这里只有精品视频在线| 天天爽天天干| 色丁香五月婷婷综合久久| 激情五月色婷婷| 91免费在线视频6| 狠狠色综合精品视频在线| 日本久久精品| 色五月天 丁香| 五月丁香亭亭AV女优| 丁香五月天导航| 79色色色色| 26uuu精品国产| 91丁香色五月| 久久丝丝热| 五月停停激情网| 久色视频| 婷婷五月花.97| 色色色99| 五月婷婷六月综合| 五月丁香六月激情综合| 五月综合激情久久| 婷婷综合五月| 99综合色| 色婷婷小说| 五月丁香激情婷婷| 婷婷五月天日逼| 99日本黄站| 久久五月热| 久久99热这里只有精品23| 欧美成人日韩| 九色成人AV在线| 亚洲免费99| 另类小说激情五月天| 亚洲激情综合| 色五月天激情| 成人在线99| 色色亚洲99com| 婷婷久久五月天| 色综合久久综合| 99热这里只有精品2024| 五月丁香六月婷婷网| 狠狠久久婷婷| 色色色国产| 国产全是老熟女太爽了| 日本片日本片祼观看网站在线看中文版网页在线看 | 少妇大叫太大太粗太爽了A片| 成年人夜夜喷水| 操人妻视频91| 久久五月热| 天天操夜夜爱| 国产99久| www.sezonghe| 丁香五月-激情综合| 欧美天天综合网站上去吧| 精品久热| 草操AV在线| 超碰碰碰碰| 婷婷久久午夜网| 99热这里只有精| 99色综合网| 五月激情六月综合| 五月天啪啪| 狠狠做婷婷| 99热91| 色五月激情| 色情五月天小说| 天天舔天天爽| 99在线观看视频精品| 久久人妻精品| 热久久77777| 风流少妇A片一区二区蜜桃 | 青青草色在线视频观看| 久久多色| 99热久| 91Chinese在线| 99re这里只有精品免费| 国产做A爰片毛片A片美国| 夜夜天天久久婷婷| 成人丁香婷婷| 综合五月丁香六月婷婷| 婷婷五月a| 99狠狠| 婷婷丁香熟妇综合网| 日日干天天爽| 欧美综合激情五月丁香| 婷婷欠久少妇| 777色色色| 99黄色在线视频精品熟女| 另类图片天天影视在线观看| 亚洲综合在线伊人婷| 公的粗大挺进了我的密道| 春色激情第四色| 欧美三级韩国三级日本三斤| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 5月丁香美女影院| 色婷婷精品| 伊人久久大香蕉网| 久久色情| 婷婷五月综合视频| 国产精品色婷婷久久久精品| 亚洲av网站| 最新激情五月天| 超碰人人摸AV| AV色婷婷| 色久婷婷网| 狠狠婷婷日韩| 9|无码久久久久久| 婷婷六月丁香久| ztEJj| WWW,五月| 婷婷六月啪啪| 涩涩涩婷婷| 九九超日本| 色欲丁香| 丁香五月激情澎湃一区| 五月婷婷六月丁香首页| 97色干| 操逼123网| 久9精品| 99免费热视频在线| 日日肏夜夜干| 久久久27操| 久久久18| 五月婷婷六月丁香激情| 日本 欧美在线| 午夜69成人做爰视频| 亚洲综合激情五月久久| 欧美操人| 1024久婷| 99精品在线播放| 色情五月停停丁香| 成人色五月天婷婷| 亚洲操女| 91婷婷| 午夜激情五月天| 日韩无码专区| 九热视频在线伦| site:pnnrt.com| 五月婷婷丁香色播网| 丁香色婷婷| 日韩欧美婷婷丁| 人人爱人人草| 五月婷婷在线视频观看| 婷婷五月天xxx| 色婷婷四色| 图片区 小说区 区 亚洲五月| 久色资源| 五月丁香激情婷婷综合字幕| 99热亚洲精品| www免费在线视频| 欧美色色色| 激情五月婷婷六月丁香| 思思热久久阴99| 久九九热| 婷婷丁香成人色综合| 狠狠丁香| 99精品热| 五月天婷婷色五月天| 影音先锋91视频| 极品少妇XXXX精品少妇偷拍| 大香蕉伊人爱在线| 99视频只有这里精品| 5月婷婷视频网站综合| 五月丁香视频色色| 操B无码视频国语| 九九热精品| 色色com| 武汉美女啪啪视频免费一级片| 性色欲情 网站| 色婷婷色综合激情91| 五月激情综合婷婷| 国产精品美女久久久久AV超清| 婷婷刺激综合| 丁香五月综合AV在线| 日韩av干| 久热这里只有国产| a九九热www| www综合久久| 99精品丁香五月| 欧美大肥婆大肥BBBBB| 99色亚洲| 丁香五月天婷婷激情| 日日夜夜爽| 丁香五月花婷婷开心| 色婷婷婷婷| 九九热在线99| 自拍视频在线观看9| WWW、99热| 艹B高清无码| 色婷婷电影网| 日本99久久| 五月婷视频| 9色视频在线| 大香蕉五月婷婷| 久久九九国产| 日韩情色在线观看| 欧美超碰亚洲| av一区二区电影免费在线观看| 久久久国产精品黄毛片| 欧美韩国日本| 九九视频在线观看视频6 | 99精在线| 婷婷激情六月| 天天拍天天操| 九九这里都是精品| 六月婷婷五月天| 久久三级视频| 婷婷五月av| 久热这里只有精品6| 五月天综合视频| 色五月激情网| 色五月综合| 97人人干| 丁香五月激情五月| 99久久国产宗和精品1上映| 欧美日韩精品人妻狠狠躁免费视频| 激情丁香婷婷| 欧美电影在线观看| 久久se 综合网| 激情网 久久| 日本道久久91| 操逼巨乳91| 亚洲免费av在线| 久热 91| 噜噜噜噜噜久| 五月天国产成人| 男人综合网| 综合激情深爱| 一个色的综合| 狠狠干思思热| 另类激情综合| 99九色视频在线观看| 色综合com| 色播五月婷婷| 色婷婷香蕉在线| 变态另类色图| 99爱99操| 密黄站| 天天成人综合| 五月天色婷婷激情| 99精品热视频| 人妻啪啪啪| 国产毛片精品一区二区色欲黄A片| 99热最新国内| 婷婷之玖玖| 亚洲网视屏| 五月综合777| 五月天激情小说欧美激情| 六月丁香五月婷婷| 婷婷天天日婷婷| 欧美69久成人做爰视频| 欧美日韩色色| 九九精品综合| 欧美激情xxxXX| 日韩99色99| 91九色|疯狂|高潮|对白|| 天天日日夜夜| 婷婷色色综合| 成人免费在线电影| 99re思思在线视频| 操人妻视频91| 九色视频91| 日韩二区搞逼插逼毛片| 国产99久9在线| 久久综合99| 色区域网站视频| caop在线| 日日做A爰片久久毛片A片英语| 996热re视频在线观看视频| 91超碰九色| 六月婷伊人| 丁香五月成人网| 日日夜夜干| 中文在线成人| 99 热| 综合网天天| 狠狠操天天干| 九九九九九九九九九九九九九国产精品| www.婷婷五月天.com| 丁香婷婷久久老熟女综合网| 亚洲啪啪啪啪| 久久全意婷婷| av九九| 亚洲视频图片婷婷五月| 在线视频你懂得| 7777久久亚洲中文字幕| 播五月婷婷开心| 天天日天天舔| 中文人妻AV久久人妻18| 国产视频福利| 草AV9999| 九色91国产| 精品九九久久| 妻久久久久| 日韩久热| 久久婷婷七月丁香| 婷婷6月综合网| 九九热精品| 色135综合网| 大香蕉九九| 99热官网| www。五月,com| www.天天色综合| 深爱激情五月天| 182.t午在线观看| 丁香五月,开心五月,成人婷婷| 狠狠色综合精品视频在线| 亚洲V国产V欧美V久久久久久| 久久久久久激情| A久网| 激情又色又爽又黄的A片| 97色婷婷五月天| 狠狠色噜噜狠狠狠888了| 欧美激情综合| www.久久综合| 狠狠草狠狠草| 国产欧美精品AAAAAA片| 五月丁香综合啪啪| 色色国产| 欧美婷婷色五月网| 丁香五月骚喷水视频| 激情五月五月婷婷| 亚洲在线综合| 六月婷婷激情| 欧美一级a| 欧美视频在线观看噜噜| 五月婷婷六月激情| 东京热免费视频网站| 色激情五月| 久9久视频精品| 极品人妻videosss人妻| 欧美精品18| av中文在线| 日韩另类| 中文无码婷婷| 国产亚洲精品久久一区二区三区| 97ai婷婷| 噜噜噜噜综合在线| www.91AV.com| 五月丁香黄色| 激情 久久 婷婷| 高清无码中文字幕aVDV| 久热在线中文字幕色999舞 | 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 婷婷五月天视| 大香蕉五月婷婷| 一级二级香港秋霞欧美欧美秋霞| 久久久久久欧美精品se一二三四| 91操碰| 久久婷婷五月综合| 婷婷情色五月天| 精品久久9| 亚洲不卡| 99热国产这里只有精品| 婷婷射丁香| 人妻av在线| 激情六| 欧美在线视频99| 五月丁香怕啪啪| AV大香蕉| 亚洲色情一区二区三区四区| 欧美69久成人做爰视频| 五月婷婷视频啪啪美女| 夜夜爽77777妓女免费下载| 色五月天天| 精品热九九| 五月丁香基地| 色 噜噜 九月 婷婷| 这里只有精品1| 性热视频99精品| 五月天丁香久久| 色婷婷电影网| 丰满人妻一区二区三区| 五月天色导航| 九月丁香很很色| 五月婷婷丁香社区| 婷婷丁香五月色偷偷| 欧美熟女99| 婷婷午夜| 777精品久无码人妻蜜桃| 激情九九这里只有精品| 中文字幕婷婷在线| 永久AⅤ1| 狠狠色97| 久热九九| 色五月视频,小说| 第四色网婷婷| 伊人久久大香网| 99久久黄色顶级视频| 九九精品免费视频99| 天天色天天| 丁香六月久久| 无码少妇高潮喷水A片免费| 亚洲国产色色| 婷婷射图五月天| 思思热视频在线观看| 全国最新疫情| 大香蕉狠狠爱主页| 天天色视频| 99er6热在线观看精品6| 五月天堂色色| 色色网站在线| 五月婷婷开心六月激情小说| 免费亚洲成人电影AV| 97精品综合| 婷婷综合在线观看视频| 国产精品国产| 国产一区二区三区影院| 久久人妻系列| 日韩99视频| 江苏少妇性BBB搡BBB爽爽爽| 人人草人人舔| 夜夜www| 婷婷性爱综合| 超碰狠狠操| 国产精品VA在线| 亚洲天堂亚洲色色色| 九九精品9| 丁香九月婷| 人人人va亚洲视频在线| 婷婷性爱| 亚洲AV永久无码影院黑人|