91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙的網絡管理功能你們知道有多厲害嗎

OpenHarmony技術社區 ? 來源:鴻蒙技術社區 ? 作者:Buty9147 ? 2021-10-11 14:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本示例演示了如何使用網絡管理模塊相關接口,演示了以下功能:

  • 功能 1:使用默認網絡,打開連接,發送 HTTP 請求。

  • 功能 2:統計指定 UID 的上行/下行流量。

  • 功能 3:使用 Socket 方式實現不同設備間通信。此功能需要打開 WIFI,并且通信的設備連接相同的 WIFI 組成局域網。操作上,先啟動服務端,再啟動客戶端,然后從客戶端發送消息,查看服務端是否收到消息。

  • 功能 4:HTTP 緩存的使用,創建緩存,供下一次請求使用,減少數據流量和加載時間。

注意,需要以下權限:

  • ohos.permission.GET_NETWORK_INFO:獲取網絡連接信息。

  • ohos.permission.SET_NETWORK_INFO:修改網絡連接狀態。

  • ohos.permission.INTERNET:允許程序打開網絡套接字,進行網絡連接。

詳情見官方文檔,網絡管理開發概述:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/connectivity-net-overview-0000000000029978

搭建環境

安裝 DevEco Studio,詳情請參考DevEco Studio 下載:
https://developer.harmonyos.com/cn/develop/deveco-studio

設置 DevEco Studio 開發環境,DevEco Studio 開發環境需要依賴于網絡環境,需要連接上網絡才能確保工具的正常使用。

可以根據如下兩種情況來配置開發環境:

  • 如果可以直接訪問 Internet,只需進行下載 HarmonyOS SDK 操作。

  • 如果網絡不能直接訪問 Internet,需要通過代理服務器才可以訪問,請參考配置開發環境
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/environment_config-0000001052902427

下載源碼后,使用 DevEco Studio 打開項目,模擬器運行即可。真機運行需要將 config.json 中的 buddleName 修改為自己的,如果沒有請到 AGC 上進行配置。

參見《使用模擬器進行調試

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404

代碼結構

①代碼結構

如下圖:

3576ed16-2a47-11ec-82a8-dac502259ad0.png

②相關文件介紹

核心類:

  • HttpURLConnection.java //支持 HTTP 特定功能的 URLConnection

  • URLConnection.java //URL 連接

  • URL.java //指向萬維網上“資源”的指針

  • NetStatusCallback.java //網絡狀態的回調類,出現可用網絡觸發onAvailable函數

  • DataFlowStatistics.java //該類提供查詢指定蜂窩網絡、應用和網卡的整體流量統計和流量統計的接口

  • DatagramSocket.java //此類表示用于發送和接收數據報包的套接字。

  • DatagramPacket.java //數據報包

  • WifiDevice.java //該類提供 Wi-Fi 管理接口

  • NetManager.java //提供接口來管理和使用數據網絡

  • NetHandle.java //數據網絡

  • InetAddress.java //網絡 IP 地址

  • HttpResponseCache.java //該類緩存 HTTP 和 HTTPS 響應以供重用

自定義的類:

  • ThreadPoolUtil.java //線程池工具類

  • MainAbilitySlice.java //主頁面

  • NetRequestSlice.java //網絡請求&流量統計 功能頁

  • SocketClientSlice.java //Socket 客戶端

  • SocketServerSlice.java //Socket 服務端

  • HttpCacheSlice.java //HTTP 緩存功能頁

頁面布局:

  • http_cache_slice.xml //HTTP 緩存示例頁

  • net_request.slice.xml //HTTP 請求頁面

  • socket_client_slice.xml //Socket 通信客戶端頁

  • socket_server_slice.xml //Socket 通信服務端頁

  • main_ability_slice.xml //主頁面

實例講解

①界面布局

如下圖:

35f45a26-2a47-11ec-82a8-dac502259ad0.png

369ebc1e-2a47-11ec-82a8-dac502259ad0.png

371711dc-2a47-11ec-82a8-dac502259ad0.png

②后臺代碼

NetRequestSlice.java 網絡請求&流量統計功能

a.初始化網絡管理對象 NetManager。
//初始化網絡管理對象
netManager=NetManager.getInstance(null);

b.通過線程池獲取一個新線程處理進行連接請求,獲取默認數據網絡的時候需要 ohos.permission.GET_NETWORK_INFO 權限。

//用線程池的取一個新線程處理
ThreadPoolUtil.submit(()->{
HiLog.debug(LABEL_LOG,"%{public}s","ThreadPoolUtilsubmit");
//獲取默認的數據網絡,wifi和流量都關閉時,netId==0,其它時netId=390/391,musthavetheohos.permission.GET_NETWORK_INFOpermission
NetHandlenetHandle=netManager.getDefaultNet();
//接收默認數據網絡的狀態更改的回調
netManager.addDefaultNetStatusCallback(callback);

//netManager.setAppNet(netHandle);

//支持 HTTP 特定功能的 URLConnection。
HttpURLConnectionconnection=null;
//輸出流
try(ByteArrayOutputStreamoutputStream=newByteArrayOutputStream()){
//請求的URL
StringurlString=inputText.getText();

URLurl=newURL(urlString);
//使用netHandle打開URL連接,不使用代理
URLConnectionurlConnection=netHandle.openConnection(url,java.net.Proxy.NO_PROXY);
HiLog.debug(LABEL_LOG,"%{public}s","netHandleopenConnection");
//強轉換類型
if(urlConnectioninstanceofHttpURLConnection){
connection=(HttpURLConnection)urlConnection;
}
//請求類型
connection.setRequestMethod("GET");
//連接
connection.connect();
//流量統計
trafficDataStatistics(false);

try(InputStreaminputStream=urlConnection.getInputStream()){
byte[]cache=newbyte[2*1024];
intlen=inputStream.read(cache);
while(len!=-1){
//
outputStream.write(cache,0,len);
len=inputStream.read(cache);
}
}catch(IOExceptione){
HiLog.error(LABEL_LOG,"%{public}s","netRequestinnerIOException");
}
//返回結果
Stringresult=newString(outputStream.toByteArray());

//UI顯示
getUITaskDispatcher().asyncDispatch(()->outText.setText(result));
//統計完畢
trafficDataStatistics(true);

}catch(IOExceptione){
HiLog.error(LABEL_LOG,"%{public}s","netRequestIOException");
}
});

c.按照應用 ID,進行數據流量統計,在發送請求前獲取一次,在請求完成后獲取一次。

gitee 代碼中這個地方有一處筆誤,tx 代表上行流量,rx 代表下行流量才對。

詳情見官方文檔說明《流量統計》:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/connectivity-net-traffic-0000000000045998

/**
*按照應用ID,進行數據流量統計
*
*@paramisStart
*/
privatevoidtrafficDataStatistics(booleanisStart){
intuid=0;
try{
//根據給定的包名稱和用戶 ID 獲取應用程序 UID。
uid=getBundleManager().getUidByBundleName(getBundleName(),0);
}catch(RemoteExceptione){
HiLog.error(LABEL_LOG,"%{public}s","trafficDataStatisticsRemoteException");
}
if(isStart){
//獲取指定UID的下行流量。
rx=DataFlowStatistics.getUidRxBytes(uid);
//獲取指定UID的上行流量。
tx=DataFlowStatistics.getUidTxBytes(uid);
}else{
rx=DataFlowStatistics.getUidRxBytes(uid)-rx;
tx=DataFlowStatistics.getUidTxBytes(uid)-tx;

//設置UI顯示
getUITaskDispatcher().asyncDispatch(()->statisticsText.setText(
"TrafficDataStatistics:"+System.lineSeparator()
+"Receivetraffic:"+rx+System.lineSeparator()
+"Senttraffic:"+tx));
}
}
}

SocketClientSlice.java/SocketServerSlice.java Socket 客戶端/服務端

實現 Socket 通信,是要客戶端和服務端的,服務端在指定網卡上監聽指定端口,客戶端向指定 IP 指定端口發送數據,實現通信。

a.Socket 服務端開啟監聽,等待接收數據。

//監聽端口
privatestaticfinalintPORT=8888;

/**
*啟動socket服務監聽
*
*@paramcomponent
*/
privatevoidstartServer(Componentcomponent){
HiLog.debug(LABEL_LOG,"startServer");

//線程池獲取新線程處理
ThreadPoolUtil.submit(()->{
//在指定端口開啟監聽
try(DatagramSocketsocket=newDatagramSocket(PORT)){
//數據報包
DatagramPacketpacket=newDatagramPacket(newbyte[255],255);
//死循環接收數據
while(true){
//接收數據
socket.receive(packet);

//通過專有線程同步設置要顯示接收到的數據
getUITaskDispatcher().syncDispatch(()->outText.setText(
"Receiveamessagefrom:"+packet.getAddress().getHostAddress()
+System.lineSeparator()+"onport"+packet.getPort()
+System.lineSeparator()+"message:"+newString(
packet.getData()).substring(0,packet.getLength())
));
packet.setLength(255);

//延遲一下,留出處理數據的時間
Thread.sleep(1000);
}
}catch(IOException|InterruptedExceptione){
e.printStackTrace();
HiLog.error(LABEL_LOG,"%{public}s","StartServerIOException|InterruptedException"+e);
}
});
}


/**
*獲取服務器端IP地址,顯示給客戶端發送消息使用
*
*@return
*/
privateStringgetLocationIpAddress(){
HiLog.debug(LABEL_LOG,"getLocationIpAddress");
//提供接口來管理 Wi-Fi。
WifiDevicewifiDevice=WifiDevice.getInstance(this);
HiLog.debug(LABEL_LOG,"wifiDevice:"+wifiDevice);
//WifiLinkedInfo提供有關 Wi-Fi 連接的信息。
OptionallinkedInfo=wifiDevice.getLinkedInfo();
HiLog.debug(LABEL_LOG,"linkedInfo:"+linkedInfo);
//獲取IP地址
intip=linkedInfo.get().getIpAddress();
HiLog.debug(LABEL_LOG,"ip:"+ip);
return(ip&0xFF)+"."+((ip>>8)&0xFF)+"."+((ip>>16)&0xFF)+"."+(ip>>24&0xFF);
}

b.Socket 客戶端發送數據,等待接收數據。

初始化 NetManager 對象→new 一個 DatagramSocket獲取當前數據網絡 NetHandle獲取服務端的 IP 地址對象 InetAddressDatagramSocket 綁定到 NetHandlenew 一個數據報包 DatagramPacket發送數據。

//通信端口
privatestaticfinalintPORT=8888;


/**
*發送網絡請求
*@paramcomponent
*/
privatevoidnetRequest(Componentcomponent){
HiLog.debug(LABEL_LOG,"netRequest");
//啟動新線程
ThreadPoolUtil.submit(()->{
//初始化網絡管理對象
NetManagernetManager=NetManager.getInstance(null);

//檢查默認數據網絡是否已激活。
if(!netManager.hasDefaultNet()){
return;
}
//new套接字
try(DatagramSocketsocket=newDatagramSocket()){
//獲取當前數據網絡
NetHandlenetHandle=netManager.getDefaultNet();

//獲取服務端的IP地址
InetAddressaddress=netHandle.getByName(inputText.getText());
//將套接字綁定到當前網絡
netHandle.bindSocket(socket);
byte[]buffer="I'mfromClient".getBytes();
//數據包
DatagramPacketrequest=newDatagramPacket(buffer,buffer.length,address,PORT);
//發送數據
socket.send(request);
HiLog.debug(LABEL_LOG,"sendsocket");
}catch(IOExceptione){
e.printStackTrace();
HiLog.error(LABEL_LOG,"%{public}s","netRequestIOException"+e);
}
});
}

HttpCacheSlice.java HTTP 緩存功能

應用重復打開一個相同網頁時,可以優先從緩存文件里讀取內容,從而減少數據流量,降低設備功耗,提升應用性能。

問:如何設置優先從緩存文件里讀取內容?答:不用額外設置,自動的~~設置緩存,需要考慮緩存位置和緩存大小。

a.初始化緩存 install。

/**
*開啟緩存
*開啟后自動緩存數據,不需要手動處理
*/
privatevoidinitCache(Componentcomponent){
//默認的緩存目錄
FilehttpCacheDir=newFile(this.getCacheDir(),"http");
//緩存大小
longhttpCacheSize=10*1024*1024;
try{
//配置緩存目錄及最大緩存空間
HttpResponseCache.install(httpCacheDir,httpCacheSize);
HiLog.debug(LABEL_LOG,"%{public}s","initCache,cacheinstalled["+httpCacheDir+"]");
}catch(IOExceptione){
HiLog.error(LABEL_LOG,"%{public}s","initCacheIOException");
}
}

b.保存緩存,將緩存寫入文件系統 flush。

/**
*將緩存寫入文件系統,防止緩存丟失
*/
privatevoidflushCache(Componentcomponent){
HiLog.debug(LABEL_LOG,"%{public}s","flushCache");
try{
//獲取緩存對象
HttpResponseCachecache=HttpResponseCache.getInstalled();
HiLog.debug(LABEL_LOG,"%{public}s","cache:"+cache);
if(cache!=null){
try{
//將緩存寫入文件系統,如果cacheisclosed會報錯//java.lang.IllegalStateException:cacheisclosed
cache.flush();
getUITaskDispatcher().syncDispatch(()->{
//圖片加載時間,測試緩存和不緩存的差別
duration.setText("cacheflushsuccess");
});
HiLog.debug(LABEL_LOG,"%{public}s","cacheflush");
}catch(IOExceptione){
HiLog.error(LABEL_LOG,"%{public}s","onStopIOException");
}
}
}catch(IllegalStateExceptione){
e.printStackTrace();
}
}

c.禁用緩存并刪除其中的數據 delete。
/**
*禁用緩存并刪除其中的數據
*/
privatevoiddeleteCache(Componentcomponent){
HiLog.debug(LABEL_LOG,"%{public}s","deleteCache");
//獲取緩存對象
HttpResponseCachecache=HttpResponseCache.getInstalled();
HiLog.debug(LABEL_LOG,"%{public}s","cache:"+cache);
if(cache!=null){
try{
//禁用緩存并刪除其中的數據。
cache.delete();
image.setPixelMap(null);
HiLog.debug(LABEL_LOG,"%{public}s","cachedelete");
}catch(IOExceptione){
HiLog.error(LABEL_LOG,"%{public}s","onStopIOException");
}

}
}

/**
*測試請求
*
*@paramcomponent
*/
privatevoidstartRequest(Componentcomponent){
HiLog.debug(LABEL_LOG,"%{public}s","startRequest");
ThreadPoolUtil.submit(()->{
try{
longstartTime=System.currentTimeMillis();
HiLog.debug(LABEL_LOG,"%{public}s","startTime:"+startTime);
//請求URL
URLurl=newURL(inputText.getText());
URLConnectionurlConnection=url.openConnection();
HiLog.debug(LABEL_LOG,"%{public}s","openConnection");
//判斷連接類型
if(urlConnectioninstanceofHttpURLConnection){
HiLog.debug(LABEL_LOG,"%{public}s","urlConnection");
HttpURLConnectionconnection=(HttpURLConnection)urlConnection;
HiLog.debug(LABEL_LOG,"%{public}s","connect:"+connection);
//連接
connection.connect();
HiLog.debug(LABEL_LOG,"%{public}s","connected");
//連接結果
if(connection.getResponseCode()==HttpURLConnection.HTTP_OK){
HiLog.debug(LABEL_LOG,"%{public}s","HTTP_OK");
//描述圖像數據源選項,例如包括表示為 image/png 的圖像格式。
ImageSource.SourceOptionssrcOpts=newImageSource.SourceOptions();
ImageSourceimageSource=ImageSource.create(connection.getInputStream(),srcOpts);
//以像素矩陣的形式提供圖像。
PixelMappixelMap=imageSource.createPixelmap(null);
HiLog.debug(LABEL_LOG,"%{public}s","pixelMap:"+pixelMap);
//專有線程同步設置圖片顯示
getUITaskDispatcher().syncDispatch(()->{
image.setPixelMap(pixelMap);
//圖片加載時間,測試緩存和不緩存的差別
duration.setText(String.valueOf(System.currentTimeMillis()-startTime)+"ms");
});
HiLog.debug(LABEL_LOG,"%{public}s","setPixelMap");
HiLog.debug(LABEL_LOG,"%{public}s","endTime:"+(System.currentTimeMillis()-startTime));
}
HiLog.debug(LABEL_LOG,"%{public}s","finish");
//關閉連接
connection.disconnect();
}
}catch(Exceptione){
HiLog.error(LABEL_LOG,"%{public}s","initCacheException"+e);
getUITaskDispatcher().syncDispatch(()->{
//圖片加載時間,測試緩存和不緩存的差別
duration.setText("cacheisclosed,pleaseopencache");
});
}
});
}

總結說明

①兩種打開網絡連接的方式:

URLConnectionurlConnection=url.openConnection();

//使用netHandle打開URL連接,不使用代理
URLConnectionurlConnection=netHandle.openConnection(url,java.net.Proxy.NO_PROXY);

②未開啟緩存情況下,發送請求的時長在 400-2000ms 之間,開啟后,需要點擊兩次發送請求,時長維持在 90-200ms 左右。

③禁用并清除緩存 delete/close 后,在沒有再次開啟緩存前,無法發送請求。這個操作官方文檔注釋寫的是 “結束時關閉緩存”。

完整代碼

附件直接下載:

https://harmonyos.51cto.com/resource/1270
編輯:jq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網絡管理
    +關注

    關注

    0

    文章

    125

    瀏覽量

    28203
  • HTTP
    +關注

    關注

    0

    文章

    525

    瀏覽量

    33508
  • 數據包
    +關注

    關注

    0

    文章

    269

    瀏覽量

    24990
  • 代碼
    +關注

    關注

    30

    文章

    4900

    瀏覽量

    70733
  • 鴻蒙系統
    +關注

    關注

    183

    文章

    2642

    瀏覽量

    68093

原文標題:鴻蒙的網絡管理功能,十分強悍!

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    智能裝備物聯網遠程管理平臺是什么?什么功能

    預警、遠程維護、數據分析與決策支持等功能,幫助企業提高設備運行效率、降低運維成本并提升整體生產管理水平。 平臺核心功能詳解 設備接入與統一管理
    的頭像 發表于 07-10 15:03 ?127次閱讀

    網絡電機伺服系統監控終端設計

    較少,只能實現基本的系統狀態監控和報警等功能。同時,需要現場對每個電機驅動器參數逐一進行設定,不便于系統的使用和調試\"1。因此,針對基于CAN總線的電機伺服系統,設計一種實時性高、運行
    發表于 06-23 07:15

    鴻蒙5開發寶藏案例分享---優化應用包體積大小問題

    ?** 鴻蒙包體積優化實戰:藏在官方文檔里的寶藏技巧!** 大家好呀~我是你們鴻蒙開發小伙伴!今天在翻官方文檔時,發現了一個超實用的「包體積優化」案例寶藏庫!這些技巧明明能大幅提升應用體驗,卻很
    發表于 06-13 10:09

    鴻蒙5開發寶藏案例分享---自由流轉的拖拽屏聯動

    ? 【干貨預警】鴻蒙開發寶藏案例大揭秘!手把手教你玩轉常用功能**?** 大家好呀~,今天在扒拉鴻蒙文檔的時候,突然發現官方竟然藏了一堆超實用的開發案例! ?** 之前總覺得鴻蒙生態資
    發表于 06-03 18:50

    數字化能源管理系統平臺什么功能

    數字化能源管理系統平臺具有多種功能,主要包括數據采集與處理、實時監測、能源分析、節能優化、設備管理、安全管理以及報表與可視化等,以下是具體介紹: 1.數據采集與處理
    的頭像 發表于 04-25 09:29 ?283次閱讀

    DevEco Studio AI輔助開發工具兩大升級功能 鴻蒙應用開發效率再提升

    HarmonyOS應用的AI智能輔助開發助手——CodeGenie,該AI助手深度集成在DevEco Studio中,提供鴻蒙知識智能問答、鴻蒙ArkTS代碼補全/生成和萬能卡片生成等功能,提升了開發效率,深受廣大
    發表于 04-18 14:43

    在線監測管理系統的智能化功能詳解 多角色權限與多項目管理 終端適配

    在線監測管理系統的智能化功能詳解 多角色權限與多項目管理 終端適配 在線監測管理系統采用基于BS架構設計,用戶可通過瀏覽器實現項目
    的頭像 發表于 03-19 17:18 ?353次閱讀

    開源啦!!!基于鴻蒙ArkTS封裝的圖表組件《McCharts》,大家快來一起共創

    Hello;大家好,我是陳楊。好久沒更新了,首先是自己本職工作比較忙,基本沒時間寫作。其次就是學習技術,自學鴻蒙ArkTS語言已經接近半年了,也算半路出師了,這次將分享我封裝的組件庫,所以啥講錯
    發表于 03-15 15:21

    AIGC入門及鴻蒙入門

    、小巧、功能強大等特點,能夠在物聯網時代為用戶提供更加便捷、高效的服務。 2. 開發環境搭建: 下載并安裝DevEco Studio,這是華為官方為鴻蒙系統開發提供的集成開發環境。 配置開發環境,包括安裝
    發表于 01-13 10:32

    鴻蒙Flutter實戰:14-現有Flutter 項目支持鴻蒙 II

    。 通過模塊化、鴻蒙殼工程,結合 FVM 管理版本 Flutter SDK,最終,保持原 Flutter 代碼純凈,最小化修改,完成了鴻蒙化的適配示例。 本項目代碼地址: https
    發表于 12-26 14:59

    ShiMeta鴻蒙屏同步拼接解決方案

    ???方案概述鴻蒙屏同步解決方案在ShiMeta鴻蒙數字標牌系統的基礎上,通過信號處理器,實現多個顯示屏幕之間的內容同步顯示,以提升信息傳達的效率和視覺體驗。鴻蒙
    的頭像 發表于 12-13 16:45 ?715次閱讀
    ShiMeta<b class='flag-5'>鴻蒙</b><b class='flag-5'>多</b>屏同步拼接解決方案

    美國IP服務器和美國服務器什么區別

    美國IP服務器和美國服務器什么區別 美國IP服務器和美國服務器在概念、功能以及應用場
    的頭像 發表于 11-11 10:22 ?703次閱讀

    鴻蒙Flutter實戰:09-現有Flutter項目支持鴻蒙

    ,使用fvm管理版本SDK。 ## 模塊化 原有項目保持模塊化,拆分為 apps/common/components/modules/plugins等目錄,如下所示: ```bash
    發表于 10-23 16:36

    TPA3118發熱厲害,然后電感也發熱比較厲害,是什么原因?

    TPA3118發熱厲害,然后電感也發熱比較厲害,不知道是什么原因,當時聲音又很正常,沒有什么底噪呀啥的
    發表于 10-12 07:00

    網絡資源管理的新寵:洛杉磯裸機云IP服務器深度解析!

    在數字化時代,互聯網的快速發展和應用場景的不斷擴大,使得傳統的單IP服務器已經無法滿足用戶對網絡資源管理的需求。而洛杉磯裸機云IP服務器,以其獨特的優勢,成為了眾多企業和個人用戶的首選。Rak部落小編為您整理發布洛杉磯裸機云
    的頭像 發表于 07-18 09:38 ?476次閱讀
    主站蜘蛛池模板: 欧美一级高清片欧美国产欧美 | 国产aa | 一级毛片免费不卡在线视频 | 高清视频免费观看 | 黄到让你下面湿的视频 | 一级特黄aaa大片大全 | 91中文字幕在线视频 | 色噜噜狠狠色综合中文字幕 | 日本午夜大片 | 激情综合色五月丁香六月亚洲 | 天堂w | 亚洲精品蜜桃久久久久久 | 午夜激情福利视频 | 久草一本 | 国产色司机在线视频免费观看 | 性视频网址 | 又黄又爽又猛午夜性色播在线播放 | 成人在线免费网站 | 久久精品视频7 | 日本欧美一区二区免费视 | 日本三级黄色网址 | 免费看欧美一级特黄α大片 | 久久精品久久久 | 亚洲视频黄 | 精品国产理论在线观看不卡 | xxxx欧美xxxx黑人 | 狠狠色成人综合首页 | 久久黄色毛片 | 精品久久久久久久免费加勒比 | 成人福利在线视频 | 8050午夜网 | 人人插人人射 | 性欧美一区| 日韩一级在线观看 | 国产精品美女自在线观看免费 | 种子天堂| 成色视频| 亚洲卡1卡2卡新区网站 | 黄色大片免费观看 | 性生交大片免费一级 | 色多多在线|