精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于HarmonyOS控制Hi3861小車之信息通信

開發 前端 OpenHarmony
本節主要詳細講述一下通信關鍵技術,考慮到TCP/UDP協議的特性,兩者間通過UDP進行通信是一種必然的選擇,UDP一種無連接的協議。

[[422670]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

引言

在鴻蒙應用實際開發中,經常會遇到App與IOT設備間的通信,本節主要詳細講述一下通信關鍵技術,考慮到TCP/UDP協議的特性,兩者間通過UDP進行通信是一種必然的選擇,UDP一種無連接的協議,具有資源消耗小,處理速度快的優點,了解UDP是怎么通信的,這對于每一個HarmonyOS開發者也是需要了解的重點知識。

核心類

DatagramSocket、DatagramPacket、EventHandler,下面分別簡單介紹下:

1.DatagramSocket:

構造器DatagramSocket(int port, InetAddress laddr):創建一個DatagramSocket實例,并將該對象綁定到指定IP地址、指定端口。主要方法receive(DatagramPacket p):從該DatagramSocket中接收數據報,send(DatagramPacket p):以該DatagramSocket對象向外發送數據報。

2.DatagramPacket:

構造器DatagramPacket(byte[] buf, int length, InetAddress addr, int port):以一個包含數據的數組來創建DatagramPacket對象,創建該DatagramPacket對象時還指定了IP地址和端口--這就決定了該數據報的目的地。

3.EventHandler:

是HarmonyOS用于處理線程間通信的一種機制,可以通過EventRunner創建新線程,將耗時的操作放到新線程上執行。這樣既不阻塞原來的線程,任務又可以得到合理的處理。比如:主線程使用EventHandler創建子線程,子線程做耗時的下載圖片操作,下載完成后,子線程通過EventHandler通知主線程,主線程再更新UI。

功能介紹

通過App Demo控制小車運動(前進、后退、左轉、右轉、停止),主要通過UDP數據包發送命令,來說明它們間是怎么通信的,它們間控制命令以json格式發送。

如:

  1. "mode""CarControl",//控制命令分類 
  2.     "cmd""forward"//具體命令 
  3. }。 

開發指南

1、創建UDP協議的發送命令對象

  1. private UdpManager() { 
  2.         try { 
  3.             mGpsDatagramSocket = new DatagramSocket(); 
  4.         } catch (SocketException e) { 
  5.             e.printStackTrace(); 
  6.         } 
  7.     } 

2、將要發送的數據封裝成DatagramPacket對象發送

  1. DatagramPacket sRequest = new DatagramPacket(mInfoArray, mInfoArray.length, 
  2. InetAddress.getByName(getIp()), PORT); 
  3. // 開始發送 
  4. mGpsDatagramSocket.send(sRequest); 

3、構造發送的命令

  1. public void sendMessage(String info) { 
  2.         Gson gson = new Gson(); 
  3.         WifiCommand messageInfo = new WifiCommand(); 
  4.         messageInfo.setCmd(info); 
  5.         //控制類型 
  6.         messageInfo.setMode(); 
  7.         //轉換成json 
  8.         String resultJson = gson.toJson(messageInfo); 
  9.         // 創建發送命令SendMessageRunnable對象 
  10.         mSendMessageRunnable = new SendMessageRunnable(); 
  11.         mSendMessageRunnable.setInfoArray(resultJson.getBytes(StandardCharsets.UTF_8)); 
  12.         // 啟動發送命令線程 
  13.         mEventHandler.postTask(mSendMessageRunnable); 
  14.         if ("stop".equals(info) || "tripod_on".equals(info) || "tripod_off".equals(info)){ 
  15.             HiLog.info(label, "info = " + info); 
  16.         } else { 
  17.             // 啟動發送Gps請求線程和接收信息線程 
  18.             startReceive(); 
  19.             startSendGpsMessage(); 
  20.         } 
  21.         HiLog.info(label, "sendMessage = " + resultJson); 
  22.     } 

實現效果

基于HarmonyOS控制Hi3861小車之信息通信-鴻蒙HarmonyOS技術社區

附上主要源代碼

1. MainAbilitySlice

  1. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener{ 
  2.     private Button iTurnUp,iTurnDown,iTurnLeft,iTurnRight,iTurnRun; 
  3.  
  4.     private UdpManager udpManager; 
  5.     @Override 
  6.     public void onStart(Intent intent) { 
  7.         super.onStart(intent); 
  8.         super.setUIContent(ResourceTable.Layout_ability_main); 
  9.         initComponent(); 
  10.         // 初始化WiFi控制對象 
  11.         udpManager = UdpManager.getInstance(this); 
  12.     } 
  13.  
  14.     private void initComponent(){ 
  15.         iTurnUp = (Button) findComponentById(ResourceTable.Id_i_up); 
  16.         iTurnUp.setClickedListener(this); 
  17.  
  18.         iTurnDown = (Button) findComponentById(ResourceTable.Id_i_down); 
  19.         iTurnDown.setClickedListener(this); 
  20.  
  21.         iTurnLeft = (Button) findComponentById(ResourceTable.Id_i_left); 
  22.         iTurnLeft.setClickedListener(this); 
  23.  
  24.         iTurnRight = (Button) findComponentById(ResourceTable.Id_i_right); 
  25.         iTurnRight.setClickedListener(this); 
  26.  
  27.         iTurnRun = (Button) findComponentById(ResourceTable.Id_i_run); 
  28.         iTurnRun.setClickedListener(this); 

 2. UdpManager

  1. /** 
  2.  * UDP連接類 
  3.  */ 
  4. public class UdpManager { 
  5.     private static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x00134, "UdpManager"); 
  6.     private static final int PORT = 48100; 
  7.     private static final int GET_MESSAGE = 1; 
  8.     private static UdpManager sUdpManager; 
  9.     private static Context sContext; 
  10.     private UdpReceiveCallback mReceiveInformationCallback; 
  11.     private ReceiveMessageRunnable mReceiveMessageRunnable; 
  12.     private SendGpsMessageRunnable mSendGpsMessageRunnable; 
  13.     private SendMessageRunnable mSendMessageRunnable; 
  14.     private DatagramSocket mGpsDatagramSocket; 
  15.     private static  String ip = "192.168.0.1"
  16.  
  17.     /** 
  18.      * 控制是否還需要接收信息控制器 
  19.      */ 
  20.     private boolean flag = false
  21.  
  22.     private final EventHandler mEventHandler = new EventHandler(EventRunner.create()) { 
  23.         @Override 
  24.         protected void processEvent(InnerEvent event) { 
  25.             super.processEvent(event); 
  26.             if (event.eventId == GET_MESSAGE) { 
  27.                 if (mReceiveInformationCallback != null) { 
  28.                     mReceiveInformationCallback.getMessage(event.object); 
  29.                 } 
  30.             } 
  31.         } 
  32.     }; 
  33.  
  34.     private final EventHandler mReceiveEventHandler = new EventHandler(EventRunner.create()) { 
  35.     }; 
  36.  
  37.     private final EventHandler mSendGpsEventHandler = new EventHandler(EventRunner.create()) { 
  38.     }; 
  39.  
  40.     /** 
  41.      * UdpManager的單例 
  42.      * 
  43.      * @return UdpManager單例對象 
  44.      */ 
  45.     public static UdpManager getInstance(Context context) { 
  46.         if (sUdpManager == null) { 
  47.             sUdpManager = new UdpManager(); 
  48.             sContext = context; 
  49.         } 
  50.         return sUdpManager; 
  51.     } 
  52.  
  53.     /** 
  54.      * 構造函數 
  55.      */ 
  56.     private UdpManager() { 
  57.         // 創建UDP協議的發送命令對象 
  58.         try { 
  59.             mGpsDatagramSocket = new DatagramSocket(); 
  60.         } catch (SocketException e) { 
  61.             e.printStackTrace(); 
  62.         } 
  63.     } 
  64.  
  65.     /** 
  66.      * 注冊接收信息的回調函數 
  67.      * 
  68.      * @param callback 接收信息回調函數 
  69.      */ 
  70.     public void registerCallback(UdpReceiveCallback callback) { 
  71.         mReceiveInformationCallback = callback; 
  72.     } 
  73.  
  74.     /** 
  75.      * 對外提供的發送命令方法 
  76.      * 
  77.      * @param info 需要發送的命令 
  78.      */ 
  79.     public void sendMessage(String info) { 
  80.         Gson gson = new Gson(); 
  81.         UdpCommand messageInfo = new UdpCommand(); 
  82.  
  83.         // 傳進來的控制命令 
  84.         messageInfo.setCmd(info); 
  85.  
  86.         //控制類型 
  87.         messageInfo.setMode(); 
  88.  
  89.         //轉換成json 
  90.         String resultJson = gson.toJson(messageInfo); 
  91.  
  92.         // 創建發送命令SendMessageRunnable對象 
  93.         mSendMessageRunnable = new SendMessageRunnable(); 
  94.         mSendMessageRunnable.setInfoArray(resultJson.getBytes(StandardCharsets.UTF_8)); 
  95.  
  96.         // 啟動發送命令線程 
  97.         mEventHandler.postTask(mSendMessageRunnable); 
  98.  
  99.         // 啟動發送Gps請求線程和接收信息線程 
  100.         if ("stop".equals(info)) { 
  101.             HiLog.info(label, "info = " + info); 
  102.         } else { 
  103.             // 啟動發送Gps請求線程和接收信息線程 
  104.             startReceive(); 
  105.             startSendGpsMessage(); 
  106.         } 
  107.         HiLog.info(label, "sendMessage = " + resultJson); 
  108.     } 
  109.  
  110.     public String getIp() { 
  111.         return ip; 
  112.     } 
  113.  
  114.  
  115.     public void setIp(String mIp) { 
  116.         this.ip = mIp; 
  117.     } 
  118.  
  119.     /** 
  120.      * 內部類,用作發送命令 
  121.      */ 
  122.     private class SendMessageRunnable implements Runnable { 
  123.         private byte[] mInfoArray; 
  124.  
  125.         void setInfoArray(byte[] infoArray) { 
  126.             mInfoArray = infoArray; 
  127.         } 
  128.  
  129.         @Override 
  130.         public void run() { 
  131.             HiLog.info(label, "發送線程 = " + Thread.currentThread().getName()); 
  132.  
  133.             // 發送數據 
  134.             try { 
  135.                 // 延時發送50毫秒,因為如果不延時會將小車卡死 
  136.                 Thread.sleep(50); 
  137.  
  138.                 // 將要發送的數據封裝成DatagramPacket對象 
  139.                 DatagramPacket sRequest = new DatagramPacket(mInfoArray, mInfoArray.length, 
  140.                         InetAddress.getByName(getIp()), PORT); 
  141.  
  142.                 // 開始發送 
  143.                 mGpsDatagramSocket.send(sRequest); 
  144.             } catch (IOException | InterruptedException e) { 
  145.                 e.printStackTrace(); 
  146.                 HiLog.info(label, "sendMessage error"); 
  147.             } 
  148.         } 
  149.     } 
  150.  
  151.     /** 
  152.      * 內部類,用作接收命令 
  153.      */ 
  154.     private class ReceiveMessageRunnable implements Runnable { 
  155.  
  156.         @Override 
  157.         public void run() { 
  158.             try { 
  159.                 while (flag) { 
  160.                     byte[] buf = new byte[1024]; 
  161.                     DatagramPacket receiveDatagramPacket = new DatagramPacket(buf, buf.length); 
  162.                     if (mGpsDatagramSocket != null && !mGpsDatagramSocket.isClosed()) { 
  163.                         HiLog.info(label, "接收線程開始阻塞" + Thread.currentThread().getName()); 
  164.  
  165.                         // 接收返回數據,會阻塞線程 
  166.                         mGpsDatagramSocket.receive(receiveDatagramPacket); 
  167.  
  168.                         // 將得到的數據轉成json 
  169.                         String json = new String(receiveDatagramPacket.getData(), StandardCharsets.UTF_8); 
  170.                         json = json.substring(json.indexOf("{"), json.lastIndexOf("}")+1); 
  171.                         HiLog.info(label, "receiveMessage json = " + json); 
  172.  
  173.                         // 將對象發送給需要接收返回值的地方 
  174.                         mEventHandler.sendEvent(InnerEvent.get(GET_MESSAGE, json)); 
  175.                     } 
  176.                 } 
  177.             } catch (IOException e) { 
  178.                 e.printStackTrace(); 
  179.                 HiLog.error(label, "receiveMessage error"); 
  180.             } 
  181.         } 
  182.     } 
  183.  
  184.     /** 
  185.      * 內部類,用作發送請求Gps命令 
  186.      */ 
  187.     private class SendGpsMessageRunnable implements Runnable { 
  188.  
  189.         @Override 
  190.         public void run() { 
  191.             Gson gson = new Gson(); 
  192.             UdpCommand messageInfo = new UdpCommand(); 
  193.  
  194.             // 傳進來的控制命令 
  195.             messageInfo.setCmd("getinfo"); 
  196.  
  197.             //控制類型 
  198.             messageInfo.setMode(); 
  199.  
  200.             //轉換成json 
  201.             String resultJson = gson.toJson(messageInfo); 
  202.  
  203.             byte[] infoArray = resultJson.getBytes(StandardCharsets.UTF_8); 
  204.  
  205.             try { 
  206.                 // 將要發送的數據封裝成DatagramPacket對象 
  207.                 DatagramPacket sRequest = new DatagramPacket(infoArray, infoArray.length, 
  208.                         InetAddress.getByName(getIp()), PORT); 
  209.  
  210.                 // 開始發送 
  211.                 mGpsDatagramSocket.send(sRequest); 
  212.  
  213.                 // 啟動獲取Gps命令線程 
  214.                 mSendGpsEventHandler.postTask(mSendGpsMessageRunnable, 2000); 
  215.                 HiLog.info(label, "發送gps"); 
  216.             } catch (IOException e) { 
  217.                 e.printStackTrace(); 
  218.             } 
  219.         } 
  220.     } 
  221.  
  222.     /** 
  223.      * 啟動接收消息 
  224.      */ 
  225.     private void startReceive() { 
  226.         if (!flag) { 
  227.             flag = true
  228.  
  229.             // 創建接收命令ReceiveMessageRunnable對象 
  230.             mReceiveMessageRunnable = new ReceiveMessageRunnable(); 
  231.  
  232.             // 啟動接收命令線程 
  233.             mReceiveEventHandler.postTask(mReceiveMessageRunnable); 
  234.             HiLog.info(label, "開啟接收線程"); 
  235.         } 
  236.     } 
  237.  
  238.     /** 
  239.      * 開始獲取gps點 
  240.      */ 
  241.     private void startSendGpsMessage() { 
  242.         // 創建發送Gps命令SendGpsMessageRunnable對象 
  243.         if (mSendGpsMessageRunnable == null) { 
  244.             mSendGpsMessageRunnable = new SendGpsMessageRunnable(); 
  245.         } 
  246.  
  247.         // 啟動獲取Gps命令線程 
  248.         mSendGpsEventHandler.postTask(mSendGpsMessageRunnable); 
  249.         HiLog.info(label, "開啟發送gps請求線程"); 
  250.     } 

 3. UdpCommand

  1. class UdpCommand { 
  2.     // 控制命令:forward,back,leftright 
  3.     private String cmd; 
  4.     // 控制類型 
  5.     private String mode; 
  6.  
  7.     public String getCmd() { 
  8.         return cmd; 
  9.     } 
  10.  
  11.     void setCmd(String cmd) { 
  12.         this.cmd = cmd; 
  13.     } 
  14.  
  15.     public String getMode() { 
  16.         return mode; 
  17.     } 
  18.  
  19.     void setMode() { 
  20.         this.mode = "CarControl"
  21.     } 

 4. UdpReceiveCallback

  1. /** 
  2.  * 接收小車返回數據的回調函數 
  3.  */ 
  4. public interface UdpReceiveCallback { 
  5.     void getMessage(Object value); 

 5. xml布局文件

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:alignment="center" 
  7.     ohos:orientation="vertical"
  8.  
  9.     <DirectionalLayout 
  10.         ohos:height="70vp" 
  11.         ohos:width="match_parent" 
  12.         ohos:orientation="horizontal" 
  13.         ohos:layout_alignment="center" 
  14.         ohos:top_margin="10vp" > 
  15.         <Button 
  16.             ohos:id="$+id:i_up" 
  17.             ohos:height="50vp" 
  18.             ohos:width="120vp" 
  19.             ohos:background_element="#FF9F9F9F" 
  20.             ohos:left_margin="60vp" 
  21.             ohos:text_size="25fp" 
  22.             ohos:text="前進"/> 

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2020-11-03 11:39:22

wifi小車

2020-10-30 09:41:44

鴻蒙Hi3861WiFi小車

2022-03-15 15:00:59

Hi3861Pin接口鴻蒙

2022-05-30 15:21:27

Hi3861TCP通信

2020-10-16 09:50:37

Hi3861WiFi熱點

2023-07-25 10:42:39

鴻蒙遙控3861小車

2022-09-07 15:35:49

設備開發鴻蒙

2023-05-26 16:07:14

Hi3861Wifi模塊

2021-09-16 10:03:39

鴻蒙HarmonyOS應用

2020-11-02 12:07:11

鴻蒙 GPIO

2020-10-14 09:41:02

Hi3861GPIO點燈

2020-10-28 10:00:09

海思Hi3861CentOS鴻蒙LiteOS

2020-12-17 10:02:16

鴻蒙Hi3861開發板

2021-02-02 15:52:17

鴻蒙HarmonyOS應用開發

2020-12-15 11:57:49

Hi3861 HarmonyOS開發板

2022-03-07 15:05:58

HTTPHi3861數據解析

2020-11-30 13:57:48

Hi3861

2020-11-06 10:15:16

HiBurn

2020-12-31 12:22:15

鴻蒙Hi3861應用開發

2022-05-09 14:22:40

Hello WorlMNIST鴻蒙
點贊
收藏

51CTO技術棧公眾號

国产中文一区| 久久爱www.| 91麻豆免费看| 日本午夜精品理论片a级appf发布| 理论片大全免费理伦片| 人在线成免费视频| 欧美激情一区二区三区不卡 | 在线看不卡av| 永久久久久久| 亚洲不卡免费视频| 免费亚洲一区| 日韩在线免费高清视频| 巨乳女教师的诱惑| 亚洲国产欧美日本视频| 国产精品麻豆视频| 97人人澡人人爽| 国产成人免费观看视频| 国产一区二区三区网| 51久久夜色精品国产麻豆| av网站大全免费| 精彩国产在线| 国产精品一区二区久久精品爱涩| 国产综合在线看| 色无极影院亚洲| 久久伦理中文字幕| 色域天天综合网| 麻豆中文字幕在线观看| 无码国产伦一区二区三区视频| 日本不卡高清视频| 久久久欧美精品| 少妇视频在线播放| 奇米777国产一区国产二区| 欧美日韩美女一区二区| 91专区在线观看| 免费黄色在线看| 久久综合狠狠综合久久激情| 成人乱色短篇合集| 国产午夜麻豆影院在线观看| 牛牛国产精品| 夜夜嗨av一区二区三区免费区 | 成年人在线观看| 懂色av噜噜一区二区三区av| 国产精品日韩欧美| 久久久久久久久影院| 亚洲无中文字幕| 亚洲小视频在线观看| 美女网站视频在线观看| 午夜精品久久久久久毛片| 色综合亚洲欧洲| 97在线国产视频| 在线视频观看国产| 中文字幕亚洲一区二区va在线| 蜜桃导航-精品导航| 黄色av中文字幕| 韩国精品久久久| 国产精品日韩在线观看| 欧产日产国产69| 99热精品在线| 国内精品久久久| 毛片a片免费观看| 中文精品电影| 久久夜精品香蕉| 国精品人伦一区二区三区蜜桃| 久久99高清| 精品亚洲一区二区三区四区五区| 国产伦精品一区三区精东| jizzjizzjizz欧美| 精品国产凹凸成av人网站| 色哟哟免费视频| 日韩视频一二区| 日韩一区二区三区电影| 超碰在线超碰在线| 亚洲国产欧美国产第一区| 日韩三级电影网址| 中文字幕在线播放一区二区| 日本高清久久| 精品少妇一区二区三区视频免付费| 91亚洲一区二区| 日韩成人精品| 精品人伦一区二区色婷婷| 三大队在线观看| 卡通动漫国产精品| 亚洲美女在线观看| 国产精品情侣呻吟对白视频| 久久电影院7| 久久成人亚洲精品| 精品亚洲永久免费| 国产欧美精品久久| 国产精品久久久久久搜索| a片在线免费观看| 九色综合国产一区二区三区| 亚洲mm色国产网站| 狠狠躁日日躁夜夜躁av| 91视频.com| 亚洲欧洲精品在线观看| av在线看片| 欧美日韩亚洲成人| 黄色三级视频在线| 视频在线观看免费影院欧美meiju| 精品三级在线看| 亚洲天堂视频一区| 91精品推荐| 97国产在线观看| 夜夜躁日日躁狠狠久久av| 国产又粗又猛又爽又黄91精品| 91偷拍精品一区二区三区| 五月激情六月婷婷| 成人欧美一区二区三区| 日本丰满少妇xxxx| 成人午夜毛片| 538在线一区二区精品国产| 国产一级黄色录像| 久久要要av| 97免费在线视频| 亚洲在线免费观看视频| 成人晚上爱看视频| 在线观看欧美亚洲| 999福利在线视频| 欧美亚洲动漫制服丝袜| 亚洲乱妇老熟女爽到高潮的片| 国产精品入口久久| 欧美激情喷水视频| 在线观看黄色网| av影院午夜一区| 欧美性视频在线播放| 日本а中文在线天堂| 91精品国产高清一区二区三区| 国产精品无码永久免费不卡| 亚洲字幕久久| 国产精品wwwwww| 内射后入在线观看一区| 国产精品欧美久久久久一区二区| 黄色av网址在线播放| 9999精品| 在线日韩av观看| 日韩 欧美 中文| 国产精品一区二区三区四区| 亚洲国产精品www| 婷婷电影在线观看| 精品国产1区二区| 91嫩草丨国产丨精品| 日韩精品欧美精品| 久久精品一区二区三区不卡免费视频| 黄色免费网站在线观看| 在线观看日韩电影| 欧美图片一区二区| 亚洲精选久久| 国产精品久久久久久免费观看| 黄色小网站在线观看| 欧美三级午夜理伦三级中视频| 可以直接看的无码av| 黄色日韩在线| 2022国产精品| 麻豆网在线观看| 欧美日韩精品一区二区天天拍小说| 好吊日免费视频| 亚洲美洲欧洲综合国产一区| yellow视频在线观看一区二区| 欧美成人高清在线| 欧美色爱综合网| 国产欧美小视频| 免费成人在线观看视频| 五月天国产一区| 99久久婷婷国产综合精品首页| 亚洲三级黄色在线观看| 一级片在线观看免费| 91色porny在线视频| 欧美日韩在线中文| 在线日韩一区| 国产精品激情自拍| av天在线观看| 欧美美女一区二区在线观看| 欧美一级片在线视频| 国产一区二区精品在线观看| 国产精品啪啪啪视频| 亚洲第一二区| 97在线免费观看视频| 亚洲日本在线播放| 在线观看亚洲精品| 婷婷综合在线视频| 国产最新精品精品你懂的| 一区中文字幕在线观看| 亚洲精品aⅴ| 午夜精品免费视频| 青青草在线视频免费观看| 一本一道久久a久久精品| 人妻aⅴ无码一区二区三区| 人人狠狠综合久久亚洲| 一区二区精品在线观看| 欧美午夜在线播放| 91国内免费在线视频| 免费在线毛片| 欧美日韩国产综合视频在线观看| 免费中文字幕日韩| 国产91丝袜在线观看| 能在线观看的av| 成人三级视频| 91在线免费视频| 多野结衣av一区| 亚洲网址你懂得| 99久久国产免费| 精品久久久久久久久久| 日本综合在线观看| 风间由美一区二区三区在线观看| 99精品人妻少妇一区二区| 国产一区二区三区91| 99www免费人成精品| 理论片午夜视频在线观看| 一区二区在线视频播放| 国产综合视频在线| 欧美三日本三级三级在线播放| 久久97人妻无码一区二区三区| 久久婷婷国产综合精品青草| 亚洲理论中文字幕| 销魂美女一区二区三区视频在线| 中文字幕中文字幕在线中一区高清| jizz性欧美23| 国产精品视频久久| www在线观看黄色| 日韩有码在线视频| 久青草国产在线| 日韩欧美中文字幕公布| 免费黄色一级大片| 精品久久久久久久久久ntr影视| 黑人狂躁日本娇小| 久久色中文字幕| 中文字幕99页| 久久99九九99精品| 欧美日韩激情视频在线观看| 欧美91视频| 亚洲制服中文| 美女久久99| 国产精品麻豆免费版| 日韩伦理一区二区| 国产国语videosex另类| xxx性欧美| 久久伊人色综合| 成年人在线观看视频| 亚洲欧美999| 男人天堂一区二区| 日韩欧美国产麻豆| 国产精品欧美久久久久天天影视| 日本国产一区二区| 中文字幕精品无码一区二区| 亚洲一区电影777| 欧美性猛交xxxxx少妇| 国产精品美女久久久久久久久| 亚洲熟妇一区二区三区| 成人蜜臀av电影| 日本女人性视频| 国产一区二区三区四| 在线能看的av网站| 美女一区二区三区| 天天干天天干天天干天天干天天干| 久久精品人人| 国产老熟妇精品观看| 99热精品在线| 免费成人在线视频网站| 国产精品久久久久久久久久妞妞| 欧美性潮喷xxxxx免费视频看| 中文字幕一区二区av| 中文字幕超清在线免费观看| 91麻豆国产自产在线观看亚洲| 亚洲一区二区三区精品视频| 成人系列视频| 亚洲啪啪av| 91综合网人人| 一级全黄肉体裸体全过程| 91精品久久久久久久久久不卡| 手机在线视频你懂的| 欧美精品九九| 精品丰满人妻无套内射| 亚洲久久视频| 国产成人a亚洲精v品无码| 久久九九免费| 中文字幕国内自拍| 国产在线播精品第三| 国产大学生av| 97久久精品人人做人人爽50路| 特大黑人巨人吊xxxx| 久久久久久久久97黄色工厂| 色哟哟精品观看| 国产精品久久久久国产精品日日| 午夜激情视频在线播放| 亚洲蜜臀av乱码久久精品蜜桃| 久草视频在线免费看| 天天色综合成人网| 中文字幕手机在线视频| 6080亚洲精品一区二区| 日本黄色一区二区三区| 亚洲午夜精品久久久久久性色 | 国产精品中文字幕亚洲欧美| 亚洲第一在线综合在线| 午夜天堂精品久久久久| 久久黄色片视频| 免费成人你懂的| 在线播放av中文字幕| 成人网男人的天堂| 免费看污片的网站| 亚洲免费三区一区二区| 欧美一级视频免费观看| 欧美色国产精品| 免费观看黄色一级视频| 一本大道久久加勒比香蕉| 超碰电影在线播放| 26uuu日韩精品一区二区| 成人18视频在线观看| 成人三级视频在线观看一区二区| 国产91精品对白在线播放| 穿情趣内衣被c到高潮视频| 性色av一区二区怡红| 999久久久精品视频| 91在线观看一区二区| 亚洲一二三在线观看| 午夜婷婷国产麻豆精品| 中文字幕在线播放不卡| 亚洲成av人片在线观看香蕉| 91caoporn在线| 欧美亚洲激情在线| 日韩成人在线看| 日韩一区不卡| 国产亚洲成人一区| 日本黄色www| 国产精品美女久久久久aⅴ | 91精品久久久久久综合五月天| 欧美一区二区三区在线播放 | 久久精品日产第一区二区三区精品版 | 99国产在线播放| 日韩极品精品视频免费观看| www.中文字幕久久久| 97久久精品国产| 国产精品一区二区美女视频免费看 | 中文字幕一区在线观看视频| 日韩av大片在线观看| 欧美大片在线观看一区| 日本a在线播放| 国产成人在线精品| 欧美一级一片| 欧美乱大交xxxxx潮喷l头像| 国产麻豆视频一区二区| 国产乱子轮xxx农村| 在线观看国产一区二区| 色猫av在线| 91国产精品91| 中文字幕日韩在线| 四虎4hu永久免费入口| 美女一区二区视频| 亚洲图片第一页| 欧洲av一区二区嗯嗯嗯啊| 青青青手机在线视频观看| 久久免费视频网站| 成人直播在线观看| 青青在线免费观看| eeuss影院一区二区三区| 国产乱码久久久久久| 精品免费一区二区三区| 手机在线免费av| 99中文视频在线| 欧美日本一区| 中文字幕在线观看91| 亚洲午夜国产一区99re久久| 成人av手机在线| 欧美激情亚洲综合一区| av毛片精品| 黄色成人在线看| 97久久精品人人爽人人爽蜜臀| 九九热在线免费观看| 亚洲欧美国产精品久久久久久久| 伊人久久综合一区二区| 欧美午夜精品久久久久久蜜| 日韩激情在线观看| 精品人体无码一区二区三区| 在线不卡一区二区| 性国产高清在线观看| 国产精品一区二区三区精品| 99精品国产在热久久| 黄色短视频在线观看| 91国内精品野花午夜精品| 国产美女性感在线观看懂色av| 国产精品美女视频网站| 97精品97| 欧美日韩一区二区区| 精品高清美女精品国产区| 你懂得网站在线| 国产精品视频专区| 欧美fxxxxxx另类| 中文字幕免费高清视频| 色婷婷精品大在线视频| 看黄网站在线| 国产福利久久精品| 99在线|亚洲一区二区| 高清国产在线观看| 欧美一区二区三区视频在线观看| av影片在线| 先锋影音日韩| 国产精品系列在线播放| 久草手机在线视频| 久久久国产精彩视频美女艺术照福利| 4438全国亚洲精品观看视频| 日本www高清视频|