精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产一区二区在线播放| 在线观看涩涩| 亚洲小说春色综合另类电影| 91久色porny| 蜜臀久久99精品久久久久久宅男 | aaa大片在线观看| 在线观看亚洲精品福利片| 成人成人成人在线视频| 久久精品99久久香蕉国产色戒| 91九色丨porny丨国产jk| 日本激情小视频| 大地资源网3页在线观看| 日韩电影免费在线看| 日韩av一区二区在线观看| 可以免费看的黄色网址| 糖心vlog精品一区二区| 香蕉久久夜色精品国产更新时间 | 国产一级做a爱免费视频| 成人四虎影院| 91污在线观看| 亚洲一区中文字幕在线观看| 免费一级suv好看的国产网站 | 国产精品久久久久77777| 在线观看av中文字幕| 国产桃色电影在线播放| 国产99久久久国产精品潘金网站| 久久精品电影网站| 性欧美13一14内谢| 高潮久久久久久久久久久久久久 | 韩国三级成人在线| 亚洲欧洲精品成人久久奇米网| 日韩美女视频免费看| 中文精品在线观看| 吉吉日韩欧美| 国产精品私人自拍| 国产在线视频91| 亚洲中文字幕无码爆乳av| 国产又粗又猛又爽又黄的| 四虎精品一区二区三区| 国产精品久久久久久模特| 日韩成人在线视频网站| 4438x全国最大成人| 老司机在线视频二区| 国内精品国产成人| 欧美二区在线播放| 人妻无码一区二区三区| 亚洲日本在线观看视频| 国产农村妇女精品| 成人高h视频在线| 精品无码av在线| 尤物tv在线精品| 欧美三级资源在线| 成人区一区二区| 美女毛片在线看| 激情综合亚洲精品| 成人精品aaaa网站| 91精品国产综合久| 尤物精品在线| 色综合伊人色综合网| 国产探花在线观看视频| 羞羞视频在线免费国产| 26uuu亚洲婷婷狠狠天堂| 国内外成人免费视频| 久久国产视频一区| 国产精品国内免费一区二区三区| 精品少妇一区二区| 国产精品免费观看久久| a级影片在线观看| 一区二区三区中文字幕| 免费国产在线精品一区二区三区| 91丨porny丨在线中文 | 99精品电影| 久久九九全国免费精品观看| 欧美日韩在线视频免费| 色天下一区二区三区| 亚洲成人亚洲激情| 天天爽夜夜爽一区二区三区| 免费看国产曰批40分钟| 欧美日韩大片在线观看| 亚洲宅男一区| 国产亚洲精品成人av久久ww| 在线看黄色的网站| 四虎影视国产精品| 欧美性猛交xxxx免费看漫画 | 精品日韩美女的视频高清| 日本一区二区三区精品视频| 国产欧美久久久| 久久精品午夜| 欧美亚洲激情在线| 欧美成人一区二区三区高清| 亚洲天堂成人| 欧美老少做受xxxx高潮| 天堂av网手机版| 亚洲日本三级| 日韩在线观看网址| 麻豆视频在线观看| 久久三级福利| 欧美诱惑福利视频| 中文字幕激情视频| 日日夜夜精品视频天天综合网| 国产欧美日韩综合精品| 午夜精品无码一区二区三区| 国产综合色视频| 国产精品夜色7777狼人| 超碰在线97观看| 国产精品888| 51国偷自产一区二区三区| 依依成人在线视频| www.成人网.com| 国产欧美综合精品一区二区| 波多野结衣在线影院| 99天天综合性| 中文字幕一区二区三区四区五区六区| 第九色区av在线| 国产日韩欧美一区二区三区综合| 欧美另类高清视频在线| 久久国产精品高清一区二区三区| 99久久er热在这里只有精品15 | 亚洲最好看的视频| 欧美精品制服第一页| 中文字幕日韩免费| 欧美亚洲视频| 日本精品中文字幕| 国内精品久久久久久久久久| 国产成人精品一区二区三区网站观看 | 99这里只有精品视频| 欧美日韩中文字幕| 午夜视频在线免费看| 欧美国产一级| 久久国内精品一国内精品| 日韩精品在线免费视频| 国产精品久久久久久久久久妞妞 | 亚洲大奶少妇| 精品国产乱码久久久久久1区2区 | 国产情侣呻吟对白高潮| av资源网一区| 国产自产在线视频| 精品丝袜在线| 欧美日韩国产色视频| 中文字幕无码毛片免费看| 欧美国产一级| 成人免费淫片视频软件| 五月婷婷在线视频| 伊人色综合久久天天| www.色欧美| 成人动态视频| 欧美国产日韩一区二区| 精品人妻aV中文字幕乱码色欲 | 国产一级片播放| 国产盗摄一区二区三区| 可以在线看黄的网站| 国产美女福利在线观看| 日韩欧美一卡二卡| 国产三级国产精品| 99视频在线精品国自产拍免费观看| 国产成人97精品免费看片| 在线观看免费视频a| 国产乱国产乱300精品| 国产精品视频免费观看| 国产精品视频一区二区久久| 欧美视频在线观看免费| 国产全是老熟女太爽了| 日韩不卡免费视频| 亚洲一区二区在线看| av资源新版天堂在线| 91成人看片片| www.四虎在线| 99精品视频精品精品视频| 成人精品久久一区二区三区| 草莓福利社区在线| 亚洲精品一区二区三区影院 | www国产在线观看 | 美国成人毛片| 欧美日本免费一区二区三区| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 超碰在线影院| 欧美精品 日韩| 91精品国产自产| 日本不卡123| 精品视频一区二区三区四区| 免费av网站在线观看| 色综合色综合色综合色综合色综合| 亚洲热在线视频| 日韩.com| 97久久精品视频| 国产视频在线一区| 亚洲va欧美va国产va天堂影院| 亚洲精品视频三区| 精品国产一区二区三区噜噜噜| 久久全球大尺度高清视频| 99久久精品国产一区二区成人| 亚洲成人精品影院| 少妇精品无码一区二区| 国产欧美日韩一区二区三区在线| 四虎一区二区| 一二区成人影院电影网| 亚洲国产91精品在线观看| 日韩精品一区不卡| 亚洲精品欧美在线| 在线观看国产福利| 影音先锋中文字幕一区| 亚洲精品一区二区三区av| 欧美电影免费观看| 国产亚洲激情在线| 乱色精品无码一区二区国产盗| 亚洲一区在线观看免费观看电影高清| 亚洲第一区第二区第三区| 妖精视频成人观看www| 婷婷视频在线播放| 国产精一区二区| 久久高清视频免费| 欧美孕妇孕交| 91国偷自产一区二区开放时间| 国产女主播喷水高潮网红在线| 韩国一区二区在线观看| 亚洲色成人一区二区三区小说| 在线亚洲a色| 超碰97网站| 国产亚洲成av人片在线观看| 久久精品国产欧美激情| 精品欧美不卡一区二区在线观看| 欧美成人aa大片| 97超碰资源站| 欧美性生活影院| 日本二区三区视频| 国产精品一卡二卡在线观看| 成人性生生活性生交12| 欧美日韩国产高清电影| 国产伦精品一区二区三区视频孕妇| 91成人短视频在线观看| 国产精品久久久一区| 成人福利网站| 日韩视频免费中文字幕| 精品乱子伦一区二区| 欧美欧美午夜aⅴ在线观看| 欧美一区二区三区网站| 偷拍与自拍一区| 亚洲精品国产91| 极品少妇一区二区| 亚洲成色www.777999| 玖玖精品视频| 色婷婷综合久久久久中文字幕| 久久福利综合| 亚洲欧美日韩精品在线| 久久国产精品成人免费观看的软件| 欧美人与性禽动交精品| 免费视频国产一区| 亚洲japanese制服美女| 成人亚洲精品| 91久久偷偷做嫩草影院| 亚洲一区二区三区日本久久九| 91在线免费网站| 亚洲天堂手机| 欧美在线免费观看| 免费在线观看av片| 日韩中文理论片| 日本在线观看www| 中文字幕无线精品亚洲乱码一区| 亚洲av无码乱码国产麻豆| 色综合久久久久综合体桃花网| 免费观看成人毛片| 91国产免费看| 亚洲最大成人av| 欧美一区二区三级| 成人一级免费视频| 在线精品视频一区二区| 亚洲综合精品视频| 欧美一区二区不卡视频| 丁香花免费高清完整在线播放| 亚洲精品videossex少妇| 国产精品午夜福利| 欧美大片在线观看一区二区| 午夜激情小视频| 精品少妇一区二区三区免费观看| 熟妇高潮一区二区三区| 亚洲欧美一区二区三区情侣bbw | 国产av无码专区亚洲av毛网站| 久久综合一区二区| 男人女人拔萝卜视频| 成人听书哪个软件好| 亚洲欧美手机在线| 国产高清不卡二三区| 色呦呦一区二区| 国产精品热久久久久夜色精品三区| 日韩av手机在线播放| 国产成人免费在线观看不卡| 日本黄色免费观看| 久久久99久久| 97人妻精品一区二区免费| 国产精品视频第一区| 国产精品成人免费观看| 黄色成人av网| 中文字幕av在线免费观看| 日韩一区二区三区电影在线观看| 一级视频在线播放| 精品久久久久久久久久久久久久久| 欧美日韩影视| 久久手机精品视频| 日本美女在线中文版| 欧美精品videosex牲欧美| 日本孕妇大胆孕交无码| 国产成人97精品免费看片| 亚洲专区**| 亚洲成人自拍| 国产欧美三级| 久久久久国产免费| 国产精品乱人伦中文| 国产毛片aaa| 日韩欧美视频一区| 91欧美在线视频| 最新中文字幕亚洲| segui88久久综合9999| 成人啪啪免费看| 精品久久一区| 丁香六月激情婷婷| 卡一卡二国产精品 | 日韩av免费| 久久国产精品精品国产色婷婷| 日韩av影院| 另类视频在线观看+1080p| 亚洲欧美偷拍自拍| 青青在线视频免费观看| 在线观看一区| 污污视频网站在线| 欧美激情一区二区三区不卡| 99精品视频99| 在线视频国产一区| 你懂的网站在线| 亚洲人成电影在线播放| aaa在线免费观看| 欧美最猛性xxxxx免费| xxxxxhd亚洲人hd| 日韩精品免费一区| 国产乱子伦视频一区二区三区 | 国产精品白嫩美女在线观看| 国产精品2023| 男人添女荫道口喷水视频| 国产精品18久久久久久久久| 国产又粗又硬又长又爽| 亚洲一区二区三区美女| 国产精品怡红院| 久久久国产精品视频| 97色婷婷成人综合在线观看| 亚欧洲精品在线视频免费观看| 日日夜夜精品视频免费| 卡一卡二卡三在线观看| 亚洲综合一二三区| 亚洲天堂五月天| 亚洲欧美一区二区三区情侣bbw| 日本综合字幕| 日韩一区免费观看| 欧美日韩精品| www.色就是色| 国产精品网站在线| 亚洲专区在线播放| 久久夜精品va视频免费观看| 精品国产一级| 丁香六月激情网| caoporm超碰国产精品| 亚洲第一在线播放| 日韩午夜在线影院| 日本高清成人vr专区| 欧美极品少妇xxxxx| 久久精品国产亚洲5555| 亚洲日本无吗高清不卡| 美女在线视频一区| 91精品小视频| 日本久久一区二区三区| 91xxx在线观看| 亚洲在线观看视频| 激情综合亚洲| 西西444www无码大胆| 欧美美女一区二区在线观看| 在线中文字幕第一页| 国产一区国产精品| 视频一区二区三区中文字幕| 亚洲欧美综合7777色婷婷| 日韩三级电影网址| 免费毛片b在线观看| 99久久99久久| 亚洲欧美日韩精品一区二区| 亚欧精品视频一区二区三区| 日韩精品中文字幕在线一区| 中文字幕21页在线看| 中国成人亚色综合网站| 国产超碰在线一区| 日韩熟女一区二区| 九九热精品视频在线播放| 图片婷婷一区| 97超碰免费在线观看| 狠狠躁天天躁日日躁欧美| 欧美一区二区三区在线观看免费| 国产精品久久亚洲7777| 精油按摩中文字幕久久| 黄色av免费播放| 亚洲精品一区二区三区蜜桃下载| 蜜桃成人精品| 精品视频在线观看一区| 中文字幕在线一区免费| 中文字幕在线视频第一页|