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

亚洲成年人网站在线观看| 国产乱码精品1区2区3区| 亚洲国产高清高潮精品美女| 国产精品va无码一区二区| 偷拍25位美女撒尿视频在线观看| 国产精品久久久久毛片大屁完整版 | 亚洲加勒比久久88色综合| 免费黄色福利视频| 麻豆视频在线免费观看| 99久久伊人久久99| 国产aaa精品| 麻豆天美蜜桃91| 日韩动漫一区| 欧美丰满一区二区免费视频| 裸体大乳女做爰69| 四虎精品在线| 国产精品一区二区久久精品爱涩| 国产91久久婷婷一区二区| 欧美色视频一区二区三区在线观看| 国产精品sss在线观看av| 欧美日韩精品一区二区三区| 自拍日韩亚洲一区在线| 精品自拍一区| 国产婷婷精品av在线| www日韩av| 一区精品在线观看| 国产欧美短视频| 欧美成人免费全部观看天天性色| 精品人妻无码一区二区三区| 欧美视频精品全部免费观看| 欧美午夜精品一区二区蜜桃 | 国产日韩免费| 欧美刺激性大交免费视频| 变态另类ts人妖一区二区| 东京久久高清| 日韩一区二区视频在线观看| 日本xxxx黄色| 亚洲欧美在线成人| 狠狠色狠狠色综合日日五| 91成人综合网| 91在线中字| 亚洲视频一区二区在线| 日韩在线第一区| 日本中文字幕电影在线观看| 成人自拍视频在线观看| 亚洲淫片在线视频| 国产精品久久久久久免费| 日本女人一区二区三区| 欧洲永久精品大片ww免费漫画| 国产一级特黄a高潮片| 欧美在线精品一区| 欧美麻豆久久久久久中文| frxxee中国xxx麻豆hd| 日韩一区二区三区免费播放| 中文字幕亚洲综合久久筱田步美| 在线免费观看黄色小视频| 奇米影视777在线欧美电影观看| 精品国产乱码久久久久久牛牛| 欧洲美女亚洲激情| 国产精选久久| 日韩精品影音先锋| jjzzjjzz欧美69巨大| 91在线一区| 亚洲精品一区二区三区福利| 制服丝袜在线第一页| 美女视频免费精品| 日韩精品免费综合视频在线播放| 久久人人爽人人爽人人片| 亚洲精品国产setv| 亚洲最新中文字幕| 免费黄色国产视频| 午夜激情一区| 91精品国产91久久久久久吃药| 欧美另类一区二区| 久久综合图片| 成人欧美在线观看| 亚洲乱码精品久久久久..| 国产人妻精品一区二区三| 亚洲人成亚洲精品| 国产亚洲aⅴaaaaaa毛片| 女人黄色一级片| 国产精品福利在线观看播放| 欧美日本中文字幕| 亚洲欧美偷拍视频| 久久精品久久99精品久久| 97视频资源在线观看| 四虎永久在线精品免费网址| 久久日一线二线三线suv| 亚洲欧洲日韩综合二区| 天堂av最新在线| 欧美日韩激情小视频| 黄色一级免费大片| 日韩欧美中文在线观看| 日韩精品亚洲视频| 国精品人伦一区二区三区蜜桃| 综合一区二区三区| 欧洲亚洲免费在线| 99热在线只有精品| www成人在线观看| 四虎影院一区二区| 亚洲深夜视频| 欧美一区二区黄色| 成人激情av在线| 日本xxxx免费| 国产精选一区| 欧美激情欧美激情| 中文字幕乱码在线观看| 成人午夜碰碰视频| 亚洲精品国产精品久久| 丁香花在线观看完整版电影| 欧美性猛交xxxxxx富婆| 欧美xxxxx精品| 外国成人免费视频| 奇米一区二区三区四区久久| 国产农村妇女毛片精品| 2024国产精品| 国产在线观看福利| 精品人伦一区二区| 99精品美女| 欧美一级淫片videoshd| 国产一区二区麻豆| 99国产精品久久久| 神马午夜伦理影院| 88xx成人网| 亚洲精品久久久久国产| 午夜精品福利在线视频| 日日噜噜夜夜狠狠视频欧美人| 91手机在线播放| 在线观看免费黄色| 一本大道久久精品懂色aⅴ| 午夜福利三级理论电影| 99精品一区| 国产91在线高潮白浆在线观看| 丰满大乳国产精品| 亚洲欧美另类小说| 四季av一区二区三区| 国产一区日韩| 91地址最新发布| 欧性猛交ⅹxxx乱大交| 亚洲精品高清视频在线观看| 国产精品自拍视频在线| 成人在线免费小视频| 国产91色在线|| 欧美69xxxxx| 色综合天天天天做夜夜夜夜做| 亚洲天堂av网站| 国一区二区在线观看| 91在线免费视频| 顶级网黄在线播放| 91精品国产综合久久精品图片| 久久精品日韩无码| 激情av综合网| 裸体裸乳免费看| 国产精品777777在线播放| www.日韩视频| 国产精品老熟女视频一区二区| 中文字幕一区二区视频| 在线免费观看av网| 91精品国产自产拍在线观看蜜| 成人情趣片在线观看免费| 黄色免费在线观看网站| 欧美一区国产二区| 91精品国产高清一区二区三蜜臀| 国产米奇在线777精品观看| 久久av喷吹av高潮av| 日韩精品视频一区二区三区| 欧美美最猛性xxxxxx| 亚洲精品国产精品国| 午夜精品久久久久影视| 国产精品无码网站| 日本伊人色综合网| youjizz.com亚洲| 亚洲成人黄色| 456亚洲影院| a天堂中文在线| 91精品国产丝袜白色高跟鞋| 劲爆欧美第一页| 91丨九色丨蝌蚪富婆spa| 狠狠操精品视频| 亚洲不卡av不卡一区二区| 91九色视频在线观看| 超碰在线视屏| 中文字幕久久亚洲| 亚洲第一天堂网| 一本色道**综合亚洲精品蜜桃冫| 久久精品在线观看视频| 激情综合网av| 每日在线更新av| 成人在线电影在线观看视频| 99在线热播| 色8久久影院午夜场| 成人97在线观看视频| 四虎免费在线观看| 欧美男人的天堂一二区| 日本三级网站在线观看| 中文字幕免费观看一区| 乱码一区二区三区| 日本成人在线一区| 人人妻人人澡人人爽欧美一区双 | 亚洲天堂成人av| 日本中文字幕一区二区视频 | 欧美人与性动交α欧美精品济南到 | 97热在线精品视频在线观看| 1024视频在线| 日韩大陆毛片av| 国产孕妇孕交大片孕| 欧美日韩一区二区三区在线免费观看 | 国产一区二区麻豆| 欧美日韩性视频在线| 91久久久久久久久久久久久久| 不卡的av电影| 亚洲国产午夜精品| 日本美女一区二区| 男人和女人啪啪网站| 欧美在线黄色| 亚洲欧美99| 神马电影久久| 精品久久久久久乱码天堂| 九九九九九九精品任你躁| 国产成人久久久精品一区| 日本欧美电影在线观看| 色狠狠av一区二区三区香蕉蜜桃| 先锋av资源站| 精品日韩在线观看| 国产欧美第一页| 欧美丝袜自拍制服另类| 成人免费看片98欧美| 亚洲自拍偷拍av| 国产97免费视频| 亚洲欧洲日韩女同| 微拍福利一区二区| www激情久久| 素人fc2av清纯18岁| 成人h动漫精品| 国产精品成人免费一区久久羞羞| 久久99精品久久久久| 亚洲色图38p| 水野朝阳av一区二区三区| 97国产精东麻豆人妻电影| 亚洲国产激情| www精品久久| 亚洲区国产区| 僵尸世界大战2 在线播放| 欧美激情精品久久久六区热门| 2025韩国大尺度电影| 婷婷久久国产对白刺激五月99| 亚洲一卡二卡三卡四卡无卡网站在线看| 欧美人与物videos另类xxxxx| 久久精品一区二区三区不卡免费视频| 国产精品黄网站| 黑人中文字幕一区二区三区| 第四色在线一区二区| 久久九九视频| 免费不卡中文字幕在线| 欧美一区激情视频在线观看| 免费一区二区三区视频导航| 久久久久久久久一区| 西瓜成人精品人成网站| 欧美精品欧美精品| 国产一区二区三区四区五区传媒| 视频在线精品一区| 天天揉久久久久亚洲精品| 天天做天天爱天天高潮| 中文字幕日韩一区二区不卡| 美女黄色免费看| 日韩一区二区久久| 国产成人亚洲精品无码h在线| 天堂精品中文字幕在线| 亚洲欧美在线精品| 狠狠色狠狠色合久久伊人| 国产精品无码自拍| 91亚洲精华国产精华精华液| 亚洲精品视频久久久| 中文字幕欧美区| 欧美日韩精品一区二区三区视频播放| 亚洲一区二区三区中文字幕在线| 亚洲免费在线观看av| 欧美自拍丝袜亚洲| 国产特黄一级片| 亚洲国产精品va在线| 国内精品一区视频| 久久亚洲精品一区二区| 国产高清中文字幕在线| 国产第一区电影| 欧美大片91| 蜜桃在线一区二区三区精品| 色无极亚洲影院| 国产av人人夜夜澡人人爽麻豆 | 中文字幕在线观看第三页| 精品一区二区在线播放| 国产大学生视频| 中文字幕乱码一区二区免费| 精品无码久久久久久久久| 91黄色小视频| 亚洲国产精品久久人人爱潘金莲| 亚洲欧美色婷婷| 自拍亚洲图区| 国产成人精品999| 成人免费观看49www在线观看| 国产在线精品二区| 91久久电影| 成人在线免费观看av| 美女脱光内衣内裤视频久久网站| 四虎国产精品免费| 国产清纯美女被跳蛋高潮一区二区久久w| 黄色片子在线观看| 日本乱人伦一区| 男人天堂一区二区| 久久久www成人免费精品| 在线最新版中文在线| 97人人做人人人难人人做| 一区二区三区日本久久久 | 精品国产aaa| 亚洲第一综合色| 国产精品-色哟哟| 亚洲精品中文字幕女同| 欧美理论片在线播放| 国产精品亚洲欧美导航| 亚欧日韩另类中文欧美| 精品无码一区二区三区爱欲| 精品一区二区三区av| 国产精品20p| 欧美午夜激情在线| 成人久久精品人妻一区二区三区| 在线精品高清中文字幕| 成人免费短视频| 国产一区二区不卡视频在线观看| 欧美二区不卡| 亚洲欧美日本一区二区| 国产女主播视频一区二区| 久久精品一二区| 亚洲国产成人91精品| 色在线视频网| 亚洲最大的网站| 综合久久亚洲| 久久综合桃花网| 成人欧美一区二区三区在线播放| 中国a一片一级一片| 国产亚洲精品久久久久久牛牛| 僵尸再翻生在线观看| 精品国产一二| 夜久久久久久| 可以直接看的无码av| 狠狠久久五月精品中文字幕| 亚洲欧美丝袜中文综合| 午夜精品福利在线观看| 老牛影视av一区二区在线观看| 中文精品无码中文字幕无码专区| 国产精品66部| 久久精品国产亚洲av高清色欲| 精品国产乱码久久久久久免费 | 在线日韩一区二区| 国产中文字幕在线| 国产91热爆ts人妖在线| 欧美色图国产精品| 亚洲一区日韩精品| 最近中文字幕一区二区三区| 国产精品无码AV| 欧美二区在线播放| 老司机凹凸av亚洲导航| 黄色免费视频大全| 国产亚洲人成网站| 在线免费观看视频网站| 日韩在线观看高清| 免费一区二区三区在线视频| 日本福利视频一区| 91丨九色丨国产丨porny| 夜夜爽妓女8888视频免费观看| 在线视频欧美性高潮| 91麻豆精品国产综合久久久| 国产青草视频在线观看| 97se亚洲国产综合在线| 日韩黄色片网站| 久久久成人的性感天堂| 国产精品美女在线观看直播| 蜜臀av午夜一区二区三区 | 免费在线一区二区三区| 日韩精品视频中文在线观看| 精品欧美一区二区三区在线观看 | 国产美女精品久久久| 亚洲一卡久久| 91香蕉视频污在线观看| 欧美成人免费网站| 亚洲伊人av| 二级片在线观看| 91在线视频播放地址| 在线观看国产精品视频| 欧美激情在线一区| 精品福利久久久| 女同性αv亚洲女同志| 一本久久a久久免费精品不卡| 国产素人视频在线观看| 久久综合久久久| 国产一区二区三区高清播放| 五月天激情国产综合婷婷婷| 久久av在线播放| 欧美性感美女一区二区| av免费观看不卡| 欧美另类变人与禽xxxxx| 三妻四妾的电影电视剧在线观看|