黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解

瀏覽:13日期:2022-09-23 13:11:43

前言

消息推送功能可以說移動(dòng)APP不可缺少的功能之一,一般簡(jiǎn)單的推送我們可以使用第三方推送的SDK,比如極光推送、信鴿推送等,但是對(duì)于消息聊天這種及時(shí)性有要求的或者三方推送不滿足業(yè)務(wù)需求的,我們就需要使用WebSocket實(shí)現(xiàn)消息推送功能。

基本流程

WebSocket是什么,這里就不做介紹了,我們這里使用的開源框架是https://github.com/TakahikoKawasaki/nv-websocket-client

基于開源協(xié)議我們封裝實(shí)現(xiàn)WebSocket的連接、注冊(cè)、心跳、消息分發(fā)、超時(shí)任務(wù)功能,基本流程如下:

在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解

連接功能

首先我們新建一個(gè)項(xiàng)目,在build.grade中添加配置

compile ’com.neovisionaries:nv-websocket-client:2.2’

新建websocket管理類WsManger

public class WsManager { private volatile static WsManager wsManger; private WsManager() { } public static WsManager getWsManger() { if (wsManger == null) { synchronized (WsManager.class) { if (wsManger == null) { wsManger = new WsManager(); } } } return wsManger; } }

接下來添加連接方法,我們將webSocket的狀態(tài)分為三種,新建WsStatue枚舉類對(duì)應(yīng)起來

public enum WsStatus { /** * 連接成功 */ CONNECT_SUCCESS, /** * 連接失敗 */ CONNECT_FAIL, /** * 正在連接 */ CONNECTING;}

連接方法如下所示:

/** * 連接方法 這里要判斷是否登錄 此處省略 */public void connect() { //WEB_SOCKET_API 是連接的url地址, // CONNECT_TIMEOUT是連接的超時(shí)時(shí)間 這里是 5秒 try { ws = new WebSocketFactory().createSocket(WEB_SOCKET_API, CONNECT_TIMEOUT) //設(shè)置幀隊(duì)列最大值為5 .setFrameQueueSize(5) //設(shè)置不允許服務(wù)端關(guān)閉連接卻未發(fā)送關(guān)閉幀 .setMissingCloseFrameAllowed(false) //添加回調(diào)監(jiān)聽 .addListener(new WsListener()) //異步連接 .connectAsynchronously(); } catch (IOException e) { e.printStackTrace(); } setStatus(WsStatus.CONNECTING);}

調(diào)用連接方法后 我們來看連接的回調(diào) 也就是WsListener

/** * websocket回調(diào)事件 */private class WsListener extends WebSocketAdapter { @Override public void onConnected(WebSocket websocket, Map<String, List<String>> headers) throws Exception { Log.d(TAG, 'onConnected: 連接成功'); } @Override public void onConnectError(WebSocket websocket, WebSocketException exception) throws Exception { Log.d(TAG, 'onConnectError: 連接失敗'); } @Override public void onDisconnected(WebSocket websocket, WebSocketFrame serverCloseFrame, WebSocketFrame clientCloseFrame, boolean closedByServer) throws Exception { Log.d(TAG, 'onDisconnected: 斷開連接'); } @Override public void onTextMessage(WebSocket websocket, String text) throws Exception { Log.d(TAG, 'onTextMessage: 收到消息:' + text); }}

下面我們調(diào)用連接方法

WsManager.getWsManger().connect();

運(yùn)行項(xiàng)目我們可以看到如下打印:

在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解

此處我們要做的處理是,如果收到連接失敗或者斷開連接的回調(diào) 需要重新連接,我們重新調(diào)用一次連接方法即可,并且如果超過三次重連失敗,我們?cè)跇I(yè)務(wù)中可以通過調(diào)用接口來獲取數(shù)據(jù),避免數(shù)據(jù)丟失,此處細(xì)節(jié)省略。

協(xié)議封裝

此處協(xié)議如下所示:

{ 'action':'', 'requestChild':{ 'clientType':'', 'id':'' }}

心跳、發(fā)送請(qǐng)求都屬于客戶端主動(dòng)發(fā)送請(qǐng)求,對(duì)于請(qǐng)求結(jié)果我們分為成功和失敗以及超時(shí),發(fā)送超時(shí)我們是收不到服務(wù)器任何回復(fù)的,所以我們需要在發(fā)送之后將發(fā)送放在超時(shí)任務(wù)隊(duì)列中,如果請(qǐng)求成功將任務(wù)從超時(shí)隊(duì)列中移除,超時(shí)從超時(shí)隊(duì)列中獲取任務(wù)重新請(qǐng)求。

超時(shí)任務(wù)隊(duì)列中回調(diào)有成功、失敗、超時(shí)。

我們按照上述協(xié)議,新增對(duì)應(yīng)實(shí)體類,采用Builder設(shè)計(jì)模式

public class Request { /** * 行為 */ private String action; /** * 請(qǐng)求體 */ private RequestChild req; /** * 請(qǐng)求次數(shù) */ private transient int reqCount; /** * 超時(shí)的時(shí)間 */ private transient int timeOut; public Request() { } public Request(String action, int reqCount, int timeOut, RequestChild req) { this.action = action; this.req = req; this.reqCount = reqCount; this.timeOut = timeOut; } public static class Builder { //action 請(qǐng)求類型 private String action; //請(qǐng)求子類數(shù)據(jù) 按照具體業(yè)務(wù)劃分 private RequestChild req; //請(qǐng)求次數(shù) 便于重試 private int reqCount; //超時(shí)時(shí)間 private int timeOut; public Builder action(String action) { this.action = action; return this; } public Builder req(RequestChild req) { this.req = req; return this; } public Builder reqCount(int reqCount) { this.reqCount = reqCount; return this; } public Builder timeOut(int timeOut) { this.timeOut = timeOut; return this; } public Request build() { return new Request(action, reqCount, timeOut, req); } }}

public class RequestChild { /** * 設(shè)備類型 */ private String clientType; /** * 用于用戶注冊(cè)的id */ private String id; public RequestChild(String clientType, String id) { this.clientType = clientType; this.id = id; } public RequestChild() { } public static class Builder { private String clientType; private String id; public RequestChild.Builder setClientType(String clientType) { this.clientType = clientType; return this; } public RequestChild.Builder setId(String id) { this.id = id; return this; } public RequestChild build() { return new RequestChild(clientType, id); } } }

我們添加一個(gè)發(fā)送請(qǐng)求的方法如下:

/** * 發(fā)送請(qǐng)求 * * @param request 請(qǐng)求體 * @param reqCount 請(qǐng)求次數(shù) * @param requestListern 請(qǐng)求回調(diào) */private void senRequest(Request request, final int reqCount, final RequestListern requestListern) { if (!isNetConnect()) { requestListern.requestFailed('網(wǎng)絡(luò)未連接'); return; } }

請(qǐng)求回調(diào)如下所示

public interface RequestListern { /** * 請(qǐng)求成功 */ void requestSuccess(); /** * 請(qǐng)求失敗 * * @param message 請(qǐng)求失敗消息提示 */ void requestFailed(String message);}

接著我們要把請(qǐng)求放在超時(shí)隊(duì)列中,新建超時(shí)任務(wù)類,對(duì)應(yīng)的分別是請(qǐng)求參數(shù)、請(qǐng)求回調(diào)、任務(wù)調(diào)度

public class TimeOutTask { /** * 請(qǐng)求主體 */ private Request request; /** * 通用返回 */ private RequestCallBack requestCallBack; /** * r任務(wù) */ private ScheduledFuture scheduledFuture; public TimeOutTask(Request request, RequestCallBack requestCallBack, ScheduledFuture scheduledFuture) { this.request = request; this.requestCallBack = requestCallBack; this.scheduledFuture = scheduledFuture; } public ScheduledFuture getScheduledFuture() { return scheduledFuture; } public void setScheduledFuture(ScheduledFuture scheduledFuture) { this.scheduledFuture = scheduledFuture; } public Request getRequest() { return request; } public void setRequest(Request request) { this.request = request; } public RequestCallBack getRequestCallBack() { return requestCallBack; } public void setRequestCallBack(RequestCallBack requestCallBack) { this.requestCallBack = requestCallBack; } }

RequestCallBack是超時(shí)任務(wù)的回調(diào),只是比請(qǐng)求回調(diào)多了個(gè)超時(shí),因?yàn)槌瑫r(shí)的處理機(jī)制是一樣的,所以這里我們沒必要將超時(shí)回調(diào)到請(qǐng)求中

public interface RequestCallBack { /** * 請(qǐng)求成功 */ void requestSuccess(); /** * 請(qǐng)求失敗 * * @param request 請(qǐng)求體 * @param message 請(qǐng)求失敗的消息 */ void requestFailed(String message, Request request); /** * 請(qǐng)求超時(shí) * * @param request 請(qǐng)求體 */ void timeOut(Request request);}/** * 添加超時(shí)任務(wù) */private ScheduledFuture enqueueTimeout(final Request request, final long timeout) { Log.d(TAG, ' ' + 'enqueueTimeout: 添加超時(shí)任務(wù)類型為:' + request.getAction()); return executor.schedule(new Runnable() { @Override public void run() { TimeOutTask timeoutTask = callbacks.remove(request.getAction()); if (timeoutTask != null) { timeoutTask.getRequestCallBack().timeOut(timeoutTask.getRequest()); } } }, timeout, TimeUnit.MILLISECONDS);}

超時(shí)任務(wù)的方法是通過任務(wù)調(diào)度定時(shí)調(diào)用,請(qǐng)求成功后我們會(huì)把超時(shí)任務(wù)移除,當(dāng)?shù)搅顺瑫r(shí)時(shí)間時(shí),任務(wù)還存在就說明任務(wù)超時(shí)了。

每次的任務(wù)我們以action為鍵值存在hashMap中

private Map<String, CallbackWrapper> callbacks = new HashMap<>();

將任務(wù)放入超時(shí)任務(wù)代碼如下所示:

final ScheduledFuture timeoutTask = enqueueTimeout(request, request.getTimeOut()); final RequestCallBack requestCallBack = new RequestCallBack() { @Override public void requestSuccess() { requestListern.requestSuccess(); } @Override public void requestFailed(String message, Request request) { requestListern.requestFailed(message); } @Override public void timeOut(Request request) { timeOutHanlder(request); }};callbacks.put(request.getAction(), new CallbackWrapper(request, requestCallBack, timeoutTask));

一般而言,任務(wù)超時(shí)都是由于連接原因?qū)е拢晕覀冞@里可以嘗試重試一次,如果還是超時(shí),通過 timeOutHanlder(request);方法 進(jìn)行重新連接,重連代碼和連接代碼一樣,這里就省略了,做好這步操作,我們就可以發(fā)送消息了。

/** * 超時(shí)任務(wù) */private void timeOutHanlder(Request requset) { setStatus(WsStatus.CONNECT_FAIL); //這里假裝有重連 Log.d(TAG, 'timeOutHanlder: 請(qǐng)求超時(shí) 準(zhǔn)備重連');}

到這里我們的流程基本可以走通了。

心跳

首先我們要了解下心跳的作用是什么,心跳是在連接成功后,通過固定的間隔時(shí)間向服務(wù)器發(fā)送詢問,當(dāng)前是否還在線,有很多人說心跳失敗我們就重連,成功就繼續(xù)心跳,但是這里要注意的是,我們一般是收不到心跳失敗回調(diào)的,心跳也是向服務(wù)器發(fā)送數(shù)據(jù),所以我們要將所有的主動(dòng)請(qǐng)求都放在超時(shí)任務(wù)隊(duì)列中,

所以對(duì)websocket來說 請(qǐng)求結(jié)果有三種:成功、失敗、超時(shí),對(duì)于用戶 只有成功、失敗即可。

至于心跳、注冊(cè)等請(qǐng)求發(fā)送的數(shù)據(jù)是什么,這就得看我們與服務(wù)端定的協(xié)議是什么樣了,通常來說 分為action 和 requestBody,協(xié)議格式我們?cè)俚诙揭呀?jīng)封裝好了,這里我們以心跳任務(wù)為例驗(yàn)證上面的封裝。

/** * 心跳 */void keepAlive() { Request request = new Request.Builder() .reqCount(0) .timeOut(REQUEST_TIMEOUT) .action(ACTION_KEEPALIVE).build(); WsManager.getWsManger().senRequest(request, request.getReqCount() + 1, new RequestListern() { @Override public void requestSuccess() { Log.d(TAG, 'requestSuccess: 心跳發(fā)送成功了'); } @Override public void requestFailed(String message) { } });}

我們每間隔10s中開啟一次心跳任務(wù)

/** * 開始心跳 */public void startKeepAlive() { mHandler.postDelayed(mKeepAliveTask, HEART_BEAT_RATE);}/** * 心跳任務(wù) */private Runnable mKeepAliveTask = new Runnable() { @Override public void run() { keepAlive(); mHandler.removeCallbacks(mKeepAliveTask); mHandler.postDelayed(mKeepAliveTask, HEART_BEAT_RATE); }};

為了便于操作演示,在主頁(yè)面上加個(gè)按鈕 ,點(diǎn)擊按鈕調(diào)用startKeepAlive方法,運(yùn)行如下所示:

在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解

我們可以看到心跳返回的statue是300 不成功,5秒之后走到了請(qǐng)求超時(shí)的方法中,所以如果狀態(tài)返回成功的話,我們需要回調(diào)給調(diào)用者

/** * 處理 任務(wù)回調(diào) * * @param action 請(qǐng)求類型 */void disPatchCallbackWarp(String action, boolean isSuccess) { CallbackWrapper callBackWarp = callbacks.remove(action); if (callBackWarp == null) { Logger.d(TAG+' '+ 'disPatchCallbackWarp: 任務(wù)隊(duì)列為空'); } else { callBackWarp.getScheduledFuture().cancel(true); if (isSuccess) { callBackWarp.getRequestCallBack().requestSuccess(); } else { callBackWarp.getRequestCallBack().requestFailed('', new Request()); } }}

這樣調(diào)用者才知道成功或失敗。

發(fā)送其他消息與心跳一樣,只是請(qǐng)求參數(shù)不同而已,修改Request參數(shù)即可。這樣我們根據(jù)協(xié)議和業(yè)務(wù)就實(shí)現(xiàn)一個(gè)比較規(guī)范的webSocket消息推送流程了。

到此這篇關(guān)于在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解的文章就介紹到這了,更多相關(guān)Android使用WebSocket實(shí)現(xiàn)消息通信內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 亚洲国产精品成人久久 | 日韩啪| 成年人免费视频观看 | 少妇三级 | 亚洲爱婷婷色婷婷五月 | 亚洲综合精品一区二区三区 | yy77777丰满少妇影院 | 久久久亚洲精品石原莉奈 | 老子影院午夜伦不卡 | 久久久在线观看 | 亚洲国产成人精品无码一区二区 | 日韩欧美人妻一区二区三区 | 天堂资源中文在线 | www.99视频| 国产精品手机在线观看 | 撕开奶罩揉吮奶头高潮av | 国产日韩欧美一区二区久久精品 | 欧美视频日韩视频 | 欧美激情在线狂野欧美精品 | 丰满少妇奶水一区二区三区 | 一本久久知道综合久久 | 台湾佬中文字幕 | 色人阁在线视频 | 日本精品视频在线观看 | 日本一区二区三区中文字幕 | 国产精品自拍在线观看 | 国产a在亚洲线播放 | 色一情一乱一伦一区二区三区日本 | 国产激情无码一区二区三区 | 黄色毛片在线播放 | 亚洲处破女av日韩精品 | 91久久精品一区二区三区 | 丁香花在线观看免费观看图片 | 少妇寂寞小伙满足少妇在线观看 | 51久久夜色精品国产麻豆 | 日韩毛片免费观看 | 亚洲一区二区三区av天堂 | 欧美国产日韩一区 | 天堂аⅴ在线地址8 | 视频一区二区欧美 | 欧美精品一二区 | 成人午夜免费无码区 | 国产精品久久久久久久白丝制服 | 中文字幕日韩亚洲 | 91美女啪啪| 亚洲图片三区 | 1000部免费毛片在线播放 | 黄色国产小视频 | 国产露脸精品国产沙发 | 在线免费福利 | 亚洲人成精品久久久久 | 99re在线视频精品 | 999在线观看精品免费不卡网站 | 无人在线观看的免费高清视频 | 快射视频在线观看 | 色呦呦在线免费观看 | 性生活一级大片 | 亚洲国产成人久久精品大牛影视 | 山村大伦淫第1部分阅读小说 | 日韩视频在线免费观看 | 成人免费观看在线视频 | 亚洲国产精品久久人人爱潘金莲 | 国产内射999视频一区 | 天堂а√在线中文在线新版 | 丝袜人妻一区二区三区网站 | 夜夜嗨一区二区三区 | 拧花蒂尿用力按凸起喷水尿av | 国产精品久久久久久久久齐齐 | 成人免费网视频 | 免费视频一二三区 | 成人国产精品入口免费视频 | 四虎影视成人永久免费观看亚洲欧美 | 日韩欧美在线一区 | 国精品午夜福利视频不卡 | 免费黄色av | 国产真实一区二区三区 | 日韩av影片在线观看 | 国产精品老牛影院99av | 欧美一卡二卡三卡四卡视频区 | 成人国产精品 | 亚洲精品丝袜一区二区三区 | 男女性动态激烈动全过程 | 国模视频一区 | 91精品国产二区在线看大桥未久 | www国产精品内射熟女 | 国产亚洲精品精品国产亚洲综合 | 色婷婷综合久久久中文一区二区 | 欧美亚洲一区二区三区四区 | 黄色免费网站在线 | 亚洲成人基地 | 欧美做爰xxxⅹ性欧美大片 | 免费精品午夜 | 午夜精品久久久久久久99热蜜臀 | 国产一区二区三区在线观看免费 | 国产一级一片射内视频 | 色偷偷网 | 91精品欧美一区二区三区 | 狂野欧美性猛xxxx乱大交 | 成人网18免费网站 | 久久亚洲精品国产亚洲老地址 | 精品国产乱码久久久久久郑州公司 | 天天久久综合 | 国产麻豆视频 | 狠狠色噜噜狠狠狠合久 | 中文字幕精品一区二区三区精品 | 成人精品天堂一区二区三区 | eeuss影院一区二区三区 | 国精产品一区一区三区视频 | 欧美精品videos| 久久久男女 | 欧美超大胆裸体xx视频 | 成人亚洲精品久久久久 | 日韩激情在线视频 | 欧美在线www | 国产黄站 | 欧美女同在线 | 亚洲a∨无码男人的天堂 | 久久日本香蕉一区二区三区 | 国产精品人妻一区二区三区四 | 天天躁夜夜躁狠狠综合 | 日本h漫在线观看 | 国内成人自拍视频 | 40岁成熟女人牲交片 | 尤物视频免费在线观看 | 四色网址 | 熟妇人妻午夜寂寞影院 | 国产精品情侣呻吟对白视频 | 荡女精品导航 | 亚洲视频一二三 | 久久久精品国产一区二区三区 | 欧美日韩精品乱国产 | 日日射影院 | 久久免费一级片 | 精品人妻人人做人人爽夜夜爽 | 欧美精品区 | 草草网站影院白丝内射 | 91羞羞视频| 久久精品波多野结衣 | 日韩不卡一二三 | 最近的中文字幕在线看视频 | 亚洲人成电影在线播放 | 亚洲va中文字幕无码毛片 | 欧美极品少妇 | 男人的天堂国产 | 羞羞视频在线观看免费 | 另类国产ts人妖高潮系列视频 | 作爱视频在线 | 一级片日韩 | 午夜dv内射一区二区 | 日本三级做a全过程在线观看 | 久久综合久色欧美综合狠狠 | 亚洲欧美人色综合婷婷久久 | 激情亚洲天堂 | 91华人在线 | 男女裸体影院高潮 | av在线亚洲欧洲日产一区二区 | 久久精品国产一区二区三区肥胖 | √天堂资源8在线官网 | 日韩亚洲欧美在线观看 | 国产成人a亚洲精品 | 亚洲免费观看在线视频 | 综合狠狠 | 国产毛片一区二区三区va在线 | 一级黄色国产片 | 性生交大片免费看狂欲 | а天堂中文最新一区二区三区 | 精品人妻中文字幕有码在线 | 97色精品视频在线观看 | 国产一区二区免费播放 | 成年人国产网站 | 欧美一区内射最近更新 | 人妻av综合天堂一区 | 久久久久久久久久久久久久久久久久 | 亚洲精品免费av | 黄色av网站在线免费观看 | 成人在线中文字幕 | 久久夜色精品国产www红杏 | 久久艹综合| 免费成人看片 | 无码东京热一区二区三区 | 亚洲精品乱码久久久久久久久久 | 国产五区| 女教师高潮黄又色视频 | 久久国产色av免费观看 | 欧美精品色图 | 亚洲春色综合另类网蜜桃 | 一级日批片 | 国产欧美综合一区二区三区 | 久久综合久久综合久久 | 红桃视频一区 | 精东粉嫩av免费一区二区三区 | 免费看一区二区三区四区 | 中文日韩v日本国产 | 中文字幕人成乱码熟女 | 亚洲一级片在线观看 | 81国产精品久久久久久久久久 | 麻豆安全免费网址入口 | 人妻 校园 激情 另类 | 偷拍成人一区亚洲欧美 | 日韩一区二区免费视频 | 少妇性l交大片久久免费 | 亚洲欧美中文日韩在线v日本 | 亚洲va无码va在线va天堂 | 91色伦| 国产欧美在线一区二区三区 | 国产精品无码久久久久 | 欧美成人手机在线 | 亚州视频一区二区三区 | 色网站在线观看视频 | 毛片在线网站 | 少妇又紧又色又爽又刺激的视频 | 国产免费永久精品无码 | 奇米狠狠操 | 免费观看黄色一级视频 | 国产在线不卡av | 日本美女影院 | 国产怡红院在线观看 | 欧美黑人性暴力猛交喷水 | 四虎在线免费观看 | 成年性生交大片免费看 | 亚洲人交乣女bbw | 亚洲www | 性高湖久久久久久久久aaaaa | 日韩超碰人人爽人人做人人添 | 国产亚洲欧美一区二区三区 | 亚洲国产成人女毛片在线主播 | 国产人体视频 | 日产成品片a直接观看入 | 黄色一级网 | 午夜1000集 | 中文字幕日本一区 | 婷婷五月小说 | 亚洲欧洲无码一区二区三区 | 你懂的av在线 | 日女人网站| 日韩a片无码毛片免费看 | 少妇饥渴放荡91麻豆 | 嫩草影院久久 | 日本内谢少妇xxxxx少交 | 久久久久高潮毛片免费全部播放 | 国产精品久久久久久久久久久免费看 | 日韩精品国产精品 | 国产做a爱片久久毛片a片 | 精品无码人妻一区二区三区品 | 动漫美女爆羞羞动漫在线蜜桃 | 久热中文| 国产精品理人伦一区二区三区 | 国产又粗又硬视频 | 国产全是老熟女太爽了 | 日韩 在线 中文 制服一区 | 国产原创在线视频 | 亚洲精品久久久久午夜 | 五月天激情丁香 | 黑人一级黄色片 | 不戴套各种姿势啪啪高素质 | 日韩欧美国产片 | 四虎国产精品成人免费4hu | 里番acg☆里番本子全彩 | 中国一级一级全黄 | 午夜激情视频在线播放 | 少妇淫片| 久久123| 无限资源日本好片 | 俺来也俺来啦awww官网 | 男人添女人高潮免费网站打开网站 | h狠狠躁死你h出轨高h | 三级亚洲 | 亚洲色中文字幕在线播放 | 日韩美女国产精品 | 最新毛片基地 | 国产精品一区二区免费 | 一区免费视频 | 欧美成人高潮一二区在线看 | 欧美精品在线观看 | 视频日韩 | 欧美成人无尺码免费视频软件 | 亚洲日韩中文字幕一区 | 在线第一页 | 不卡视频一区 | 让少妇高潮无乱码高清在线观看 | 国精产品999国精产品蜜臀 | 鲁一鲁一鲁一鲁一澡 | 日本少妇高潮喷水视频 | 亚洲成人在线视频观看 | 奇米第四色7777 | 最新不卡av | 日本美女a级片 | 熟妇五十路六十路息与子 | 精品视频无码一区二区三区 | 亚洲黄色中文字幕 | 午夜不卡av免费 | 国产一区二区三区免费观看网站上 | 一级黄色毛片视频 | 成人天堂婷婷青青视频在线观看 | 国产伦精品一区二区三区四区免费 | 中文字幕永久免费视频 | 日本免费无人高清 | 老女老肥熟国产在线视频 | 国产精品成人一区二区三区 | 天天狠天天干 | 九七影院在线观看免费观看电视 | 国产理论av | 97精品一区二区视频在线观看 | 亚洲男人天堂久久 | 欧美精品第三页 | 一本大道久久a久久精二百 一本大道久久a久久精品综合1 | 人妻被按摩到潮喷中文字幕 | 婷婷超碰 | 图片区乱熟图片区小说 | 五月天视频网 | 中国极品少妇xxxx做受 | 日韩av成人在线 | 色婷婷综合久色aⅴ五区最新 | 欧美一区视频在线 | 成人免费视频毛片 | 国产产无码乱码精品久久鸭 | 国产性生活网站 | 少妇的性事hd| 久久精品国产亚洲7777 | 涩涩网址 | 欲妇荡岳丰满少妇岳91在线 | 白天躁晚上躁麻豆视频 | 红杏亚洲影院一区二区三区 | 91人人看| 国产麻豆a毛片 | 性猛交xxxx乱大交孕妇2 | 大地资源中文在线观看官网第二页 | 97久久精品人人爽人人爽蜜臀 | 国产舌乚八伦偷品w中 | 日韩av免费在线观看 | av性天堂网| 99视频免费在线观看 | 欧美精品免费一区二区三区 | a在线播放| 中文文字幕文字幕高清 | 亚洲精品成人网 | 性一交一乱一色一情丿按摩 | 色老99久久九九爱精品 | 国产精品免费看 | 国产热の有码热の无码视频 | 波多野结衣av高清一区二区三区 | 亚洲v不卡ww在线 | 强睡邻居人妻中文字幕 | 精品国产成人亚洲午夜福利 | 欧洲经典二三区 | 成人国产欧美大片一区 | 谁有免费的黄色网址 | awww在线天堂bd资源在线 | 午夜精品福利一区二区三区蜜桃 | 一卡二卡精品 | 免费的黄色的视频 | 可以直接看的无码av | 另类亚洲激情 | 亚洲tv在线| 欧洲熟妇色xxxx欧美老妇 | 国产午夜福利久久精品 | 中文字幕一区二区三区第十负 | 亚洲国产亚洲 | 999精产国品一二三区 | 中文字幕久久久久人妻 | 亚洲理论中文字幕 | 黄频网站在线观看 | 男女啪祼交视频 | 香港三日本8a三级少妇三级99 | 蜜桃视频黄色 | 免费性片| 国产色综合天天综合网 | 五月婷婷在线观看视频 | 日本道之久久综合久久爱 | 国产区网址 | 日韩欧美在线一区 | 成人乱人乱一区二区三区 | 久久免费黄色网址 | 欧美激情视频在线 | 欧美亚洲国产精品久久高清浪潮 | 日韩69| 国产精品av久久久久久无 | 宅男的天堂 | av在线不卡一区 | 国产伦子伦对白在线播放观看 | 女人高潮被爽到呻吟在线观看 | 日韩女优在线 | 亚洲人精品午夜 | 一区二区三区日韩视频在线观看 | 狠狠干一区| 欧美性猛交xxx乱大交3 | 撸撸综合色av | 肉色超薄丝袜脚交91 | 精品成人一区二区 | 情欲按摩院同性3 | 午夜香蕉视频 | 亚洲色精品aⅴ一区区三区 国产黄大片在线观看 | 无码一区二区三区在线观看 | 三级视频网站 | 麻豆精品91| a∨变态另类天堂无码专区 人妻丰满熟妇av无码区不卡 | 国内精自视频品线一区 | 国产色视频在线 | 日韩中文人妻无码不卡 | 国产老头和老太xxxx视频 | fc2成人免费人成在线观看播放 | 欧美在线一二三四区 | 香蕉视频二区 | 黄色片在线 | www.香蕉视频在线观看 | 777久久久 | 美女一区二区三区 | 日日夜夜免费视频 | www.白浆| 久久精品免费看 | 在线观看国产福利 | 久久狼人亚洲精品一区 | 日本色婷婷 | www日本在线观看 | 国产国产精品人在线视 | 樱花影院电视剧免费 | 快灬快灬一下爽69xx免费 | 免费jizz| 欧美性xxxxx极品娇小 | 日本成人精品视频 | 久久久精品国产免费观看一区二区 | 午夜在线视频一区二区区别 | 亚洲国产日韩精品一区二区三区 | 国产精品久久久久久久久久久久午 | 久久久久久三级 | 国产精品高潮呻吟久久av无 | 精品久久久久久久久中文字幕 | 福利视频免费 | 日韩黄色av网站 | 丁香一区二区 | 91精品国产亚洲 | 一级在线观看 | 这里只有精品久久 | 在线观看国产一级片 | 亚洲色图图片 | 欧美精品国产动漫 | 四虎精品永久在线 | 狼人伊人久久 | 亚洲最大综合网 | 天天摸天天爽日韩欧美大片 | 中文字幕乱码亚洲无线三区 | 97视频入口| 亚洲精品毛片一级91精品 | 丰满人妻一区二区三区无码av | 久久久久国产一区二区 | 免费看成人aa片无码视频羞羞网 | 少妇又色又紧又黄又刺激免费 | 香蕉人妻av久久久久天天 | 久久久91精品 | 国产精品密蕾丝袜 | 色情无码www视频无码区小黄鸭 | 777天堂麻豆爱综合视频 | 无套内谢少妇露脸 | 精品国产乱码久久久久久88av | a级特黄毛片 | 欧美日韩一区二区三区四区五区 | 干干日日 | 亚洲精品久久久久9999吃药 | 日日噜噜夜夜狠狠va视频v | 欧美精品一区二区久久 | 中文字幕第2页不卡 | 夜夜涩| 中文字幕在线观看 | 国产av无码专区亚洲版综合 | 99re视频这里只有精品 | 潘金莲性xxxxhd | 亚洲精品毛片一区二区三区 | 成人在线观看h | 在线激情小视频 | 久久精品视频一区二区 | 成人久久一区 | 亚洲蜜桃精久久久久久久久久久久 | 少妇激情视频一二三区 | 午夜国产福利在线 | 色综合久久久久久久久五月 | 亚洲一区二区天堂 | 九九热免费在线 | 欧美自偷自拍 | 欧美大黑bbbbbbbbb在线 | 五月婷婷导航 | 国产成人三级 | 日韩sese| 日本少妇做爰奶水狂喷小说 | 成品片a免人看免费 | 青青久久av北条麻妃黑人 | 一二三国产777avav | a视频免费在线观看 | 26uuu久久噜噜噜噜 | 精品美女在线 | 中文字幕高清免费日韩视频在线 | 草逼国产 | 欧美中日韩免费观看网站 | 欧性猛交ⅹxxx乱大交 | 国产成人精品一区二区三区 | 草草久久久 | 日本一本在线 | 白晶晶果冻传媒国产今日推荐 | 精品久久久久久久久久久久 | 欧美视频一区在线观看 | 日产精品久久久久久久蜜臀 | 舌头伸进添得好爽高潮欧美 | 亚洲精品肉丝少妇在线 | 搐搐国产丨区2区精品av | 日本脱内衣全部视频 | 国产成人无码精品久久久露脸 | 久久成年网 | 51精产品一区一区三区 | 亚洲色图15p| 国产色爽| 免费精品国产 | 麻豆网站 | 欧美视频综合 | 天天躁日日躁狠狠躁喷水软件 | 精品在线视频观看 | 意大利少妇愉情理伦片 | 欧美日韩国产成人在线 | 亚洲精品无码永久在线观看性色 | 欧美日韩国产精品 | 国产女主播视频一区二区 | 国产精品天堂avav在线 | 国产l精品国产亚洲区在线观看 | 亚洲欧美中文日韩在线 | 亚洲 中文 欧美 日韩 在线 | 美女十八毛片 | 亚洲男人天堂av | 九久久 | 欧美va亚洲va | 国产欧美一区二区精品久久久 | 18禁网站免费无遮挡无码中文 | 国产午夜精品一区二区 | 久久在线视频 | 欧美伦理一区 | 18深夜在线观看免费视频 | 围产精品久久久久久久 | 天天射夜夜 | 久久青草费线频观看 | 欧美色图狠狠干 | 精品成人在线 | 丰满岳跪趴高撅肥臀尤物在线观看 | 红杏aⅴ成人免费视频 | 在线免费黄 | 农村乱人伦一区二区 | 青青青青青手机视频在线观看视频 | 丁香花在线观看免费观看图片 | 亚洲精品成人在线视频 | 一区二区三区在线不卡 | 5a级毛片 | 美女三级毛片 | 2021中文字幕| www.国产精品 | 欧美数码高清视频 | 欧美性猛交99久久久久99按摩 | 成人免费看片39在线 | 国产丝袜调教 | www.亚洲视频| 91国内精品 | 久久国产柳州莫菁门 | 婷婷亚洲五月 | 亚洲制服在线观看 | 亚洲乱码国产乱码精品精大量 | 狠狠躁夜夜躁xxxxaaaa | 成人影院yy111111在线观看 | 天堂中文最新版在线中文 | 97色在线观看免费视频 | 精品免费视频 | 中文字幕乱码在线人视频 | 4438xx亚洲最大五色丁香软件 | 久久尤物免费一区二区三区 | 亚洲视频在线观看免费视频 | 亚洲视频高清 | 一级做a爱片性色毛片 | 亚洲一区免费看 | 校园春色亚洲色图 | 黄色a在线观看 | 国产精品成人va在线播放 | 青青草这里只有精品 | 国产第一页浮力影院入口 | 久久久噜噜噜久久熟女aa片 | 日本一区午夜艳熟免费 | 麻豆成人91精品二区三区 | 国产精品黄视频 | 网站在线免费网站在线免费观看国产网页 | 亚洲爽爆 | 蜜桃av网 | 乖女从小调教h尿便器小说 关秀媚三级 | 久久精品欧美日韩 | 精品人妻中文无码av在线 | 91精品国自产拍在线观看不卡 | www.亚洲色图.com | 热の国产| 一本一道波多野结衣av黑人 | 天天综合网国产 | 污污网站在线播放 | 青青青青青手机视频在线观看视频 | 黄色国产在线播放 | 杨幂一区二区三区免费看视频 | 久久国产乱子伦免费精品 | 伊朗做爰xxxⅹ性视频 | 欧美性潮喷xxxxx免费视频看 | 国产精品夜夜夜爽张柏芝 | 国精产品一区二区 | 国产a免费视频 | 免费三片在线观看网站v888 | 网站在线看 | 精品毛片一区二区 | 97av视频在线观看 | 中文字幕一区二区三区乱码在线 | 亚洲精品久久久久中文第一暮 | 中产乱码中文在线观看免费软件 | 黄色的视频网站 | 欧美永久免费 | 尤物一区二区 | 成人免费网站在线 | 少妇饥渴偷公乱51 | 97精品视频在线 |