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

Introduction to the commonly used MQTT client library

原創 精選
Techplur
This article will use the public Broker broker.emqx.io provided by EMQ , and use a simple example of connecting Broker, publishing and processing messages by client to summarize the usage and examples

Overview

MQTT is a lightweight ??publish-subscribe??? mode messaging protocol designed for IoT applications in low-bandwidth and unstable network environments. MQTT is based on the publish/subscribe paradigm and works on the TCP/IP protocol family. ??MQTT protocol?? is lightweight, simple, open and easy to implement, which makes it suitable for a wide range of applications.

MQTT is based on the client-server communication mode. MQTT server is called as MQTT Broker. Currently, there are many MQTT Brokers in the industry, whose advantages and disadvantages and functional differences will not be discussed in this article. Taking the ??most popular MQTT broker - EMQX??? in the open source community as an example, this article uses the public Broker ??broker.emqx.io??? provided by ??EMQ??? , and uses a simple example of connecting Broker, publishing and processing messages by client to summarizes the usage and examples of ??MQTT client libraries?? under different programming languages and platforms.

The selected MQTT client libraries are as follows:

  • Eclipse Paho C and Eclipse Paho Embedded C
  • Eclipse Paho Java Client
  • Eclipse Paho MQTT Go client
  • emqtt : Erlang mqtt client library provided by EMQ
  • MQTT.js Web & Node.js Platform MQTT Client
  • Eclipse Paho Python


Sample application introduction

The action of the MQTT client throughout its lifecycle can be summarized as: establishing a connection, subscribing to a topic, receiving and processing a message, publishing a message to a specified topic, unsubscribing, and disconnecting.

The standard client library shows the corresponding method in each link. The meaning of the method parameters required by different libraries in the same link is roughly the same. The specific parameters to be selected and the functional features to be enabled need the user to have a deep understanding of the MQTT protocol features and to be determined in combination with the actual application scenarios.

This paper takes a client connecting, publishing and processing messages as an example to show the parameters to be used in each link:


  • Establish a connection
  • Specify the MQTT Broker basic information access address and port
  • Specify whether the transfer type is TCP or MQTT over WebSocket
  • If TLS is enabled, it is required to select the protocol version with the corresponding certificate.
  • If Broker has enabled authentication, the client needs to carry the corresponding MQTT Username Password information
  • Configure client parameters such as keepalive duration, clean session callback retention flag, MQTT protocol version,??will message?? (LWT), etc.
  • Subscribe to the topic : After the connection is successfully established, the topic can be subscribed to when the topic information is specified.
  • Specify topic filter Topic, support for the use of the topic wildcards??+??? and??#?? during subscribing
  • Specify QoS, Qos 0 1 2 is optional according to the implementation of the client library and the broker. Note that some brokers and cloud service providers do not support some QoS levels. For example, AWS IoT, Alibaba Cloud IoT Suite, and Azure IoT Hub do not support QoS 2 Level message
  • Subscribing to topics may fail due to network issues or Broker ACL rule restrictions
  • Receive messages and process:
  • Generally, the processing function is specified at the time of connection. The processing method is slightly different depending on the network programming model of the client library and the platform.
  • Publishing a message: Publish a message to a specified topic
  • Specify the target topic. Note that the topic cannot contain the wildcard??+??? or??#??, which may lead to message publishing failure and client disconnection (depending on the implementation of broker and Client Library)
  • Specify the message QoS level. There are also different QoS levels supported by different brokers and platforms. For example, if Azure IoT Hub publishes a message of QoS 2, it will disconnect the client
  • Specify the message body content, whose size cannot exceed the maximum message size set by the broker
  • Specify message Retain flag
  • Unsubscribe:
  • Specify the target topic
  • Disconnect:
  • Proactively disconnect with issuing a Will Message (LWT)


Eclipse Paho C and Eclipse Paho Embedded C

Both ??Eclipse Paho C??? and ??Eclipse Paho Embedded C??? are client libraries under the Eclipse Paho project, which are full-featured MQTT clients written in ANSI C. Eclipse Paho Embedded C can be used on desktop operating systems, but mainly for Embedded environments such as ??mbed???,??Arduino??? and ??FreeRTOS?? .

The client has two kinds of APIs, synchronous and asynchronous, which start with mqttclient and mqttasync respectively:

  • The Synchronization API is designed to be simpler and more useful, and some calls will block until the operation is complete, making programming easier.
  • There is only one call block??API-waitForCompletion?? in the asynchronous API, and the result is notified through the callback, which is more suitable for the environment of the non-main thread.

For detailed download and usage instructions of the two libraries, please go to the project home page to view. This article uses Eclipse Paho C to provide the sample code directly as follows:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#include "MQTTClient.h"

#define ADDRESS "tcp://broker.emqx.io:1883"
#define CLIENTID "emqx_test"
#define TOPIC "testtopic/1"
#define PAYLOAD "Hello World!"
#define QOS 1
#define TIMEOUT 10000L

int main(int argc, char* argv[])
{
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_message pubmsg = MQTTClient_message_initializer;
MQTTClient_deliveryToken token;
int rc;

MQTTClient_create(&client, ADDRESS, CLIENTID,
MQTTCLIENT_PERSISTENCE_NONE, NULL);

// Connection parameters
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;

if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(-1);
}

// Publish message
pubmsg.payload = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
pubmsg.retained = 0;
MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);
printf("Waiting for up to %d seconds for publication of %s\n"
"on topic %s for client with ClientID: %s\n",
(int)(TIMEOUT/1000), PAYLOAD, TOPIC, CLIENTID);
rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);
printf("Message with delivery token %d delivered\n", token);

// Disconnect
MQTTClient_disconnect(client, 10000);
MQTTClient_destroy(&client);
return rc;
}

Eclipse Paho Java Client

??Eclipse Paho Java Client?? is an MQTT client library written in Java that can be used with JVM or other Java compatible platforms such as Android.

The Eclipse Paho Java Client provides the MqttAsyncClient and MqttClient as asynchronous and synchronization APIs.

Install via Maven:

<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>

The connection sample code is as follows:

App.java

package io.emqx;

import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;


public class App {
public static void main(String[] args) {
String subTopic = "testtopic/#";
String pubTopic = "testtopic/1";
String content = "Hello World";
int qos = 2;
String broker = "tcp://broker.emqx.io:1883";
String clientId = "emqx_test";
MemoryPersistence persistence = new MemoryPersistence();

try {
MqttClient client = new MqttClient(broker, clientId, persistence);

// Connection options
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setUserName("emqx_test");
connOpts.setPassword("emqx_test_password".toCharArray());
// Retain connection
connOpts.setCleanSession(true);

// Set callback
client.setCallback(new PushCallback());

// Setup connection
System.out.println("Connecting to broker: " + broker);
client.connect(connOpts);

System.out.println("Connected");
System.out.println("Publishing message: " + content);

// Publish
client.subscribe(subTopic);

// Required parameters for publishing message
MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(qos);
client.publish(pubTopic, message);
System.out.println("Message published");

client.disconnect();
System.out.println("Disconnected");
client.close();
System.exit(0);
} catch (MqttException me) {
System.out.println("reason " + me.getReasonCode());
System.out.println("msg " + me.getMessage());
System.out.println("loc " + me.getLocalizedMessage());
System.out.println("cause " + me.getCause());
System.out.println("excep " + me);
me.printStackTrace();
}
}
}

Callback message processing class OnMessageCallback.java

package io.emqx;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;

public class OnMessageCallback implements MqttCallback {
public void connectionLost(Throwable cause) {
// Reconnect after lost connection.
System.out.println("Connection lost, and re-connect here.");
}

public void messageArrived(String topic, MqttMessage message) throws Exception {
// Message handler after receiving message
System.out.println("Topic:" + topic);
System.out.println("QoS:" + message.getQos());
System.out.println("Payload:" + new String(message.getPayload()));
}

public void deliveryComplete(IMqttDeliveryToken token) {
System.out.println("deliveryComplete---------" + token.isComplete());
}
}

Eclipse Paho MQTT Go client

??Eclipse Paho MQTT Go Client?? is the Go language client library for the Eclipse Paho project, which can connect to the MQTT Broker to publish messages, subscribe to topics and receive published messages and support a completely asynchronous mode of operation.

Clients rely on Google's ??proxy??? and ??websockets?? software Package, which can be installed with the following command:

go get github.com/eclipse/paho.mqtt.golang

The connection sample code is as follows:

package main

import (
"fmt"
"log"
"os"
"time"

"github.com/eclipse/paho.mqtt.golang"
)

var f mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
fmt.Printf("TOPIC: %s\n", msg.Topic())
fmt.Printf("MSG: %s\n", msg.Payload())
}

func main() {
mqtt.DEBUG = log.New(os.Stdout, "", 0)
mqtt.ERROR = log.New(os.Stdout, "", 0)
opts := mqtt.NewClientOptions().AddBroker("tcp://broker.emqx.io:1883").SetClientID("emqx_test_client")

opts.SetKeepAlive(60 * time.Second)
// Message callback handler
opts.SetDefaultPublishHandler(f)
opts.SetPingTimeout(1 * time.Second)

c := mqtt.NewClient(opts)
if token := c.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
}

// Subscription
if token := c.Subscribe("testtopic/#", 0, nil); token.Wait() && token.Error() != nil {
fmt.Println(token.Error())
os.Exit(1)
}

// Publish message
token := c.Publish("testtopic/1", 0, false, "Hello World")
token.Wait()

time.Sleep(6 * time.Second)

// Cancel subscription
if token := c.Unsubscribe("testtopic/#"); token.Wait() && token.Error() != nil {
fmt.Println(token.Error())
os.Exit(1)
}

// Disconnect
c.Disconnect(250)
time.Sleep(1 * time.Second)
}

emqtt : Erlang MQTT client library provided by EMQ

??emqtt?? is a client library officially provided by EMQ of the open source MQTT Broker EMQX, which is applicable for the Erlang language.

The Erlang ecosystem has several MQTT Broker implementations, such as RabbitMQ, VerenMQ, EMQX, etc. that support MQTT through plugins. However, there is almost no room for choice in the MQTT client library. ??emqtt?? in the Erlang client library included in the MQTT community is the best choice .

Emqtt is implemented entirely by Erlang and completely supports the MQTT v3.1.1 and MQTT v5.0 protocol. It also supports SSL single and two-way authentication and WebSocket connection. Another MQTT benchmarking tool ??emqtt_bench?? is built based on this client library.

emqtt is used as follows:

ClientId = <<"test">>.
{ok, ConnPid} = emqtt:start_link([{clientid, ClientId}]).
{ok, _Props} = emqtt:connect(ConnPid).
Topic = <<"guide/#">>.
QoS = 1.
{ok, _Props, _ReasonCodes} = emqtt:subscribe(ConnPid, {Topic, QoS}).
{ok, _PktId} = emqtt:publish(ConnPid, <<"guide/1">>, <<"Hello World!">>, QoS).
%% If the qos of publish packet is 0, `publish` function would not return packetid.
ok = emqtt:publish(ConnPid, <<"guide/2">>, <<"Hello World!">>, 0).

%% Recursively get messages from mail box.
Y = fun (Proc) -> ((fun (F) -> F(F) end)((fun(ProcGen) -> Proc(fun() -> (ProcGen(ProcGen))() end) end))) end.
Rec = fun(Receive) -> fun()-> receive {publish, Msg} -> io:format("Msg: ~p~n", [Msg]), Receive(); _Other -> Receive() after 5 -> ok end end end.
(Y(Rec))().

%% If you don't like y combinator, you can also try named function to recursively get messages in erlang shell.
Receive = fun Rec() -> receive {publish, Msg} -> io:format("Msg: ~p~n", [Msg]), Rec(); _Other -> Rec() after 5 -> ok end end.
Receive().

{ok, _Props, _ReasonCode} = emqtt:unsubscribe(ConnPid, <<"guide/#">>).

ok = emqtt:disconnect(ConnPid).

MQTT.js Web & Node.js platform MQTT client

??MQTT.js??? is a module written in JavaScript that implements the MQTT protocol client functionality and can be used in Node.js or in a browser environment. When used in Node.js, the ??-g?? global installation can be done with a command line, and it can be integrated into the project for callback.

Due to the JavaScript single-threading feature, MQTT.js is a fully asynchronous MQTT client. MQTT.js supports MQTT and MQTT over WebSocket. The degree of support in different runtime environments is as follows:

  • Browser environment: MQTT over WebSocket (including custom browser environment such as WeChat applet, Alipay applet)
  • Node.js environment: MQTT, MQTT over WebSocket

In addition to a few different connection parameters in different environments, other APIs are the same.

Install with NPM:

npm i mqtt

Install with CDN (browser):

<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
<script>
// Initialize a global mqtt variable
console.log(mqtt)
</script>

Sample code:

// const mqtt = require('mqtt')
import mqtt from 'mqtt'

// Connection option
const options = {
clean: true, // Retain connection
connectTimeout: 4000, // Timeout
// Authtication
clientId: 'emqx_test',
username: 'emqx_test',
password: 'emqx_test',
}

// Connection string
// ws: unsecured WebSocket
// wss: secured WebSocket connection
// mqtt: unsecured TCP connection
// mqtts: secured TCP connection
const connectUrl = 'wss://broker.emqx.io:8084/mqtt'
const client = mqtt.connect(connectUrl, options)

client.on('reconnect', (error) => {
console.log('reconnect:', error)
})

client.on('reconnect', (error) => {
console.log('reconnect:', error)
})

client.on('message', (topic, message) => {
console.log('message:', topic, message.toString())
})

Eclipse Paho Python

??Eclipse Paho Python?? is the Python language client library under the Eclipse Paho project, which can connect to the MQTT Broker to publish messages, subscribe to topics and receive Published message.

Install with the PyPi package management tool:

pip install paho-mqtt

Sample code:

import paho.mqtt.client as mqtt


# Successful Connection Callback
def on_connect(client, userdata, flags, rc):
print('Connected with result code '+str(rc))
client.subscribe('testtopic/#')

# Message delivery callback
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()

# Set callback handler
client.on_connect = on_connect
client.on_message = on_message

# Set up connection
client.connect('broker.emqx.io', 1883, 60)
# Publish message
client.publish('emqtt',payload='Hello World',qos=0)

client.loop_forever()

Summary

This is the introduction of MQTT protocol, MQTT client library usage process and common MQTT clients. Readers are welcome to learn MQTT and develop projects through EMQX.


責任編輯:龐桂玉 來源: 51CTO
相關推薦

2024-01-03 10:00:11

Prometheus指標Go

2010-04-20 15:16:02

Oracle實例

2009-09-10 11:10:21

Linq Librar

2013-01-18 10:47:46

IBMdW

2018-08-17 06:13:16

物聯網協議MQTTMQTT-SN

2022-08-30 21:47:03

MQTT ProtoOthers

2020-10-30 11:30:15

Least Recen

2017-01-19 00:21:37

Android 開源數據庫

2009-09-02 17:20:50

C# Parsing

2022-08-31 15:09:03

PythonOthers

2023-08-25 09:17:38

2022-09-26 11:30:40

MQTT協議客戶端協議

2020-12-07 12:47:22

MQTT鴻蒙hi3861

2020-11-18 11:36:35

鴻蒙系統

2012-06-07 10:36:55

ibmdw

2016-08-11 14:26:29

Java垃圾回收機制內存分配

2010-05-25 12:59:00

Subversion

2020-07-04 10:41:32

MQTTSSE網絡協議

2020-11-17 08:59:28

MQTT

2017-02-15 09:25:36

iOS開發MQTT
點贊
收藏

51CTO技術棧公眾號

九九热这里只有在线精品视| 欧美一区二区视频在线观看2020| 蜜桃成人免费视频| 中文字幕日韩国产| 欧美1区免费| 日韩精品有码在线观看| 香港日本韩国三级网站| 性国产高清在线观看| 99v久久综合狠狠综合久久| 国产精品999999| 精品国产乱码久久久久久鸭王1 | 男人的天堂官网 | 精品视频一区在线| 亚洲视频久久久| 亚洲精品视频啊美女在线直播| 亚洲日本欧美中文幕| 亚洲欧美一区二区三区不卡| 最新欧美色图| 一区二区三区**美女毛片| 欧美精品免费观看二区| 精品人妻一区二区三区蜜桃| 天使萌一区二区三区免费观看| 欧美xxxx做受欧美.88| 色婷婷在线影院| xvideos.蜜桃一区二区| 欧美喷潮久久久xxxxx| 日韩欧美在线播放视频| 国产美女福利在线观看| 国产精品夫妻自拍| 日产国产精品精品a∨| 亚洲欧美高清视频| 国产一区在线看| 国产精品7m视频| 欧美三级午夜理伦| 伊人久久综合| 欧美日本高清一区| 国产精品久久久精品四季影院| 欧美日韩一区二区综合| 精品一区电影国产| 日韩精品人妻中文字幕有码 | 成人免费看片网址| 99热这里只有精品3| 美国三级日本三级久久99| 欧美在线视频观看| 日韩精品一区二区不卡| 国产精品豆花视频| 欧美激情一级二级| 一级黄色录像视频| 欧美日韩免费| 久久99热精品这里久久精品| 国产av 一区二区三区| 午夜精品毛片| 久久香蕉频线观| 国产高潮流白浆| 久久亚洲影音av资源网| 欧美日本黄视频| 欧美成人777| 99久久综合狠狠综合久久aⅴ| 亚洲性生活视频在线观看| aaaaa一级片| 欧美电影在线观看完整版| 精品少妇一区二区三区日产乱码| 一级片免费在线观看视频| 国产精品色婷婷在线观看| 91精品国产高清一区二区三区| 天天做天天干天天操| 欧美日韩午夜电影网| 欧美一区日韩一区| 亚洲一二三四五| 另类尿喷潮videofree| 日韩福利在线播放| 51妺嘿嘿午夜福利| 日韩成人综合| 久久成年人视频| 久久久国产成人| 日韩午夜av| 国产精品av在线| 亚洲在线观看av| 国产成人啪免费观看软件| 国产成人看片| 人人九九精品| 国产精品色一区二区三区| 中国一级黄色录像| 福利写真视频网站在线| 日韩欧美在线观看视频| 国产日韩欧美久久| 免费欧美网站| 日韩电影中文字幕在线| 成年人看的免费视频| 一本精品一区二区三区| 韩国19禁主播vip福利视频| 中文字幕精品三级久久久| 秋霞国产午夜精品免费视频| 成人综合网网址| 好吊色一区二区| 中文字幕第一区二区| 久久这里只有精品18| 婷婷综合六月| 日韩欧美综合一区| 久久只有这里有精品| 久久久久亚洲| 欧美与欧洲交xxxx免费观看 | 91黄色免费观看| 亚洲网中文字幕| 免费视频亚洲| 色在人av网站天堂精品| 国产一级片av| 成人黄页在线观看| 伊人久久大香线蕉午夜av| segui88久久综合9999| 欧美性videosxxxxx| 最新版天堂资源在线| 日韩电影免费网址| 91福利视频在线观看| 一卡二卡三卡在线| 久久久综合激的五月天| 欧美视频在线第一页| 在线成人视屏| 亚洲精品小视频| 久久久久香蕉视频| 久久成人精品无人区| 精品在线不卡| 牛牛精品在线视频| 欧美精品亚洲二区| 亚洲a v网站| 91久久久久| 99九九电视剧免费观看| 毛片在线看网站| 欧美午夜精品一区二区三区| 最近日本中文字幕| 亚洲视频狠狠| 3d精品h动漫啪啪一区二区| av黄色在线观看| 色一情一乱一乱一91av| 亚洲黄色在线网站| 伊人久久大香线蕉av超碰演员| 亚洲xxx自由成熟| jizz在线观看视频| 91国偷自产一区二区开放时间 | 国产人妻精品一区二区三区| 亚洲国产成人一区二区三区| 人妻无码视频一区二区三区| 亚洲婷婷丁香| 欧美最猛性xxxxx(亚洲精品)| 欧美一区二区黄片| 性久久久久久久| 欧美一区二区免费在线观看| 亚洲激情欧美| 国产精品久久久对白| 91九色在线播放| 亚洲激情自拍图| 国产区一区二区三| 久久这里只有精品视频网| 久久久999免费视频| 日韩在线黄色| 日韩美女写真福利在线观看| 黄色在线播放| 欧美在线啊v一区| 亚洲a∨无码无在线观看| 蜜臀久久久久久久| 免费观看国产视频在线| 欧美.com| 国内精品久久久久久久| 性感美女视频一二三| 日韩欧美精品在线观看| 永久免费看mv网站入口78| 视频精品一区二区| 亚洲人成影视在线观看| 91成人短视频在线观看| 久久成年人免费电影| 黄色片一区二区三区| 午夜成人在线视频| 国产视频三区四区| 精品一区二区免费看| 国产91视频一区| 精品国产影院| 国产精品高潮粉嫩av| 成人av免费| 亚洲第一精品夜夜躁人人躁| 国产精品久久久久久久妇| 欧美韩日一区二区三区四区| √天堂资源在线| aⅴ色国产欧美| 五月天国产一区| 国产精品一区三区在线观看| 久久全球大尺度高清视频| 欧美xxx.com| 91精品国产综合久久久久| 日本一二三区视频| 久久久久久97三级| 国产一区二区在线观看免费视频| 一区在线免费观看| 午夜精品亚洲一区二区三区嫩草| 国模大尺度视频一区二区| 午夜精品蜜臀一区二区三区免费| 国产小视频福利在线| 日韩欧美亚洲国产另类| 亚洲欧美另类在线视频| 一区二区三区中文免费| 性猛交ⅹxxx富婆video | 国产精品永久在线| a级片免费在线观看| 国产亚洲欧美一区| 日本美女一级片| 欧美欧美欧美欧美首页| 久草视频在线观| 亚洲欧美日韩国产另类专区| 中文字幕在线看高清电影| 国产成人精品亚洲午夜麻豆| 国产日韩成人内射视频| 亚洲国产激情| 天天爱天天做天天操| 香蕉久久夜色精品国产更新时间| 91超碰在线电影| 久久亚洲资源中文字| 45www国产精品网站| 国产又色又爽又黄刺激在线视频| 精品国产一区久久久| 麻豆av电影在线观看| 亚洲国产精品va在线| 国产视频一区二区三| 欧美午夜精品久久久| 国产成人精品网| 亚洲成av人片在www色猫咪| 性欧美videos| 国产色综合一区| 大黑人交xxx极品hd| 成人美女视频在线观看18| 91热视频在线观看| 日韩1区2区3区| 欧美日韩一区二区在线免费观看| 尤物精品在线| 8x8x华人在线| 婷婷综合在线| 日韩精品大片| 日韩有码一区| 看欧美日韩国产| 岛国av一区| 成人av免费电影| 视频一区视频二区欧美| 91最新在线免费观看| 婷婷久久综合九色综合99蜜桃| 国产精品久久久久久av| 亚洲承认视频| 国产成人一区二区| 香蕉成人av| 国产精品高潮呻吟久久av黑人| 网友自拍亚洲| 日本中文字幕久久看| 国模冰冰炮一区二区| 欧美亚洲另类激情另类| 成人免费影院| 国产精品mp4| 成人不卡视频| 成人国内精品久久久久一区| 亚洲我射av| 91在线观看免费高清| 久久九九精品视频| 超碰97在线播放| 欧美a一欧美| 欧美日韩精品一区| av一区二区高清| 一本久道久久综合| 一区二区三区四区电影| 中文精品无码中文字幕无码专区| 日韩视频一区| 六月激情综合网| 日韩成人免费在线| 成人黄色一级大片| 国产成人久久精品77777最新版本| 国内精品国产三级国产aⅴ久| 成人在线视频一区| 中文字幕在线1| 国产精品伦理一区二区| 99精品久久久久| 亚洲v精品v日韩v欧美v专区| 99超碰在线观看| 欧美一区日韩一区| 五月婷婷伊人网| 日韩在线视频线视频免费网站| 最新日本在线观看| 国产91精品久久久| 成人午夜亚洲| 高清av免费一区中文字幕| 日韩欧美中文字幕电影| 亚洲一卡二卡三卡四卡无卡网站在线看| 91精品99| 日日碰狠狠躁久久躁婷婷| 国内久久精品视频| 又色又爽又黄18网站| 91视频国产观看| 久久精品一区二区三区四区五区| 亚洲夂夂婷婷色拍ww47 | 青春草免费在线视频| 国产91成人video| 国产精品亚洲欧美日韩一区在线| 国产乱码精品一区二区三区日韩精品| 欧美日韩伦理在线免费| 国产一区二区三区乱码| 蜜臀久久99精品久久久久久9| 人妻激情偷乱频一区二区三区| 国产婷婷色一区二区三区在线| 免费网站在线高清观看| 亚洲一区二区视频在线| 免费黄色一级大片| 日韩精品一区二区三区在线| 国产98在线| 国内成人精品一区| 综合欧美精品| 人偷久久久久久久偷女厕| 欧美视频亚洲视频| 最新国产黄色网址| 久久久久久久久久久99999| 久一区二区三区| 欧美日韩国产大片| 国产资源在线观看| 韩日精品中文字幕| 成人污版视频| 亚洲高清精品中出| 亚洲一区成人| 屁屁影院国产第一页| 亚洲主播在线播放| 99热在线只有精品| 久久久国产精品亚洲一区| xxxxx.日韩| 色播亚洲视频在线观看| 欧美亚洲视频| 黄色免费看视频| 亚洲成av人片在线| 色欲av伊人久久大香线蕉影院| 久久99久国产精品黄毛片入口| 日日夜夜一区| 亚洲精品一区二区三区蜜桃久| 丝袜a∨在线一区二区三区不卡 | 亚洲国产欧美在线观看| 麻豆中文字幕在线观看| 麻豆精品视频在线| 蜜桃久久精品成人无码av| 一本大道久久a久久精二百| 天天操天天操天天操| 97热精品视频官网| 国产一级成人av| 免费看国产一级片| 99re成人精品视频| 欧美一级视频免费观看| 亚洲精品av在线| 欧美aa在线观看| 欧美精品欧美精品| 视频一区视频二区中文| 成人在线观看免费高清| 欧美日韩国产成人在线91| av成人手机在线| 国产在线播放91| 先锋资源久久| 337p日本欧洲亚洲大胆张筱雨| 一区二区三区欧美日韩| 成人免费一级视频| 国外色69视频在线观看| 夜夜躁狠狠躁日日躁2021日韩| 毛葺葺老太做受视频| 国产精品日韩精品欧美在线| 国产精品久久久久久免费免熟| 久久深夜福利免费观看| 亚洲综合网狠久久| 夫妻免费无码v看片| 欧美激情在线观看视频免费| 91福利在线观看视频| 欧美大胆a视频| 久久午夜影院| 久久精品香蕉视频| 一色屋精品亚洲香蕉网站| 国产黄色av网站| 久久久久久久久网站| 伊人久久综合影院| 日本中文字幕观看| 亚洲mv大片欧洲mv大片精品| 麻豆国产在线播放| 91免费综合在线| 亚洲天堂黄色| 亚洲精品国产一区黑色丝袜| 在线综合亚洲欧美在线视频| 里番在线播放| 欧美日韩国产高清视频| 久久爱www久久做| 日本三级中文字幕| 伊人激情综合网| 亚洲免费一区三区| 国模杨依粉嫩蝴蝶150p| 亚洲欧美一区二区三区极速播放 | 一本色道久久88综合亚洲精品ⅰ| 日韩美女在线| 久久久久久久中文| 亚洲欧洲日产国码二区| 午夜福利一区二区三区| 国产在线视频一区| 宅男噜噜噜66国产日韩在线观看| 精品一区二区在线观看视频| 欧美精品一区二区三区四区 | 亚洲最大的黄色网| 欧美精品电影在线播放|