日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

python---websocket的使用

發(fā)布時間:2023/11/27 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python---websocket的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一:簡介

推文:WebSocket 是什么原理?為什么可以實現(xiàn)持久連接?

推文:WebSocket:5分鐘從入門到精通(很好)

WebSocket協(xié)議是基于TCP的一種新的協(xié)議。WebSocket最初在HTML5規(guī)范中被引用為TCP連接,作為基于TCP的套接字API的占位符。它實現(xiàn)了瀏覽器與服務(wù)器全雙工(full-duplex)通信。其本質(zhì)是保持TCP連接,在瀏覽器和服務(wù)端通過Socket進(jìn)行通信。

二:對比:

Http:

  socket實現(xiàn),單工通道(瀏覽器只發(fā)起,服務(wù)端只做響應(yīng)),短連接,請求響應(yīng)

WebSocket:

  socket實現(xiàn),雙工通道,請求響應(yīng),推送。socket創(chuàng)建連接,不斷開

三:socket實現(xiàn)步驟

服務(wù)端:

1. 服務(wù)端開啟socket,監(jiān)聽IP和端口
3. 允許連接
* 5. 服務(wù)端接收到特殊值【加密sha1,特殊值,migic string="258EAFA5-E914-47DA-95CA-C5AB0DC85B11"* 6. 加密后的值發(fā)送給客戶端

客戶端:

2. 客戶端發(fā)起連接請求(IP和端口)
* 4. 客戶端生成一個xxx,【加密sha1,特殊值,migic string="258EAFA5-E914-47DA-95CA-C5AB0DC85B11"】,向服務(wù)端發(fā)送一段特殊值
* 7. 客戶端接收到加密的值

注意:這個魔數(shù)是固定的 258EAFA5-E914-47DA-95CA-C5AB0DC85B11

四:簡單實現(xiàn),實現(xiàn)連接

服務(wù)端:

# coding:utf8
# __author:  Administrator
# date:      2018/6/29 0029
# /usr/bin/env python
import socket,base64,hashlibdef get_headers(data):'''將請求頭轉(zhuǎn)換為字典'''header_dict = {}data = str(data,encoding="utf-8")header,body = data.split("\r\n\r\n",1)header_list = header.split("\r\n")for i in range(0,len(header_list)):if i == 0:if len(header_list[0].split(" ")) == 3:header_dict['method'],header_dict['url'],header_dict['protocol'] = header_list[0].split(" ")else:k,v=header_list[i].split(":",1)header_dict[k]=v.strip()return header_dictsock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind(("127.0.0.1",8080))
sock.listen(5)#等待用戶連接
conn,addr = sock.accept()
print("conn from ",conn,addr)
#獲取握手消息,magic string ,sha1加密
#發(fā)送給客戶端
#握手消息
data = conn.recv(8096)
headers = get_headers(data)# 對請求頭中的sec-websocket-key進(jìn)行加密
response_tpl = "HTTP/1.1 101 Switching Protocols\r\n" \"Upgrade:websocket\r\n" \"Connection: Upgrade\r\n" \"Sec-WebSocket-Accept: %s\r\n" \"WebSocket-Location: ws://%s%s\r\n\r\n"magic_string = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'value = headers['Sec-WebSocket-Key'] + magic_string
ac = base64.b64encode(hashlib.sha1(value.encode('utf-8')).digest())response_str = response_tpl % (ac.decode('utf-8'), headers['Host'], headers['url'])# 響應(yīng)【握手】信息
conn.send(bytes(response_str, encoding='utf-8'))
'''
b'
GET / HTTP/1.1\r\n
Host: 127.0.0.1:8080\r\n
Connection: Upgrade\r\n
Pragma: no-cache\r\n
Cache-Control: no-cache\r\n
Upgrade: websocket\r\n
Origin: http://localhost:63342\r\n
Sec-WebSocket-Version: 13\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.8\r\n
Sec-WebSocket-Key: +uL/aiakjNABjEoMzAqm6Q==\r\n
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n\r\n'
'''
請求頭

瀏覽器:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body></body>
</html>
<script>ws =new WebSocket("ws://127.0.0.1:8080");ws.onopen = function (ev) { //若是連接成功,onopen函數(shù)會執(zhí)行console.log(22222)}
</script>

五:數(shù)據(jù)接收規(guī)則

 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len |    Extended payload length    |  #Payload len(第二個字節(jié)的前七位,最大127)決定頭部的長度
|I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |  #若是小于126:Extended payload length擴(kuò)展頭部長度為0字節(jié),后面全部為主體數(shù)據(jù)
|N|V|V|V|       |S|             |   (if payload len==126/127)   |  #若是等于126:Extended payload length擴(kuò)展頭部長度為2字節(jié),后面全部為主體數(shù)據(jù)
| |1|2|3|       |K|             |                               |  #若是等于127:Extended payload length擴(kuò)展頭部長度為8字節(jié),后面全部為主體數(shù)據(jù)
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
|     Extended payload length continued, if payload len == 127  |  #注意:主體數(shù)據(jù)中的前四位為mask掩碼,用于后面的消息的解碼,解碼方式為循環(huán)異或操作
+ - - - - - - - - - - - - - - - +-------------------------------+
|                               |Masking-key, if MASK set to 1  |  #數(shù)據(jù)過長,需要分部發(fā)送,這時需要FIN和opcode
+-------------------------------+-------------------------------+
| Masking-key (continued)       |          Payload Data         |
+-------------------------------- - - - - - - - - - - - - - - - +
:                     Payload Data continued ...                :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|                     Payload Data continued ...                |
+---------------------------------------------------------------+
The MASK bit simply tells whether the message is encoded. Messages from the client must be masked, so your server should expect this to be 1. (In fact, section 5.1 of the spec says that your server must disconnect from a client if that client sends an unmasked message.) When sending a frame back to the client, do not mask it and do not set the mask bit. We'll explain masking later. Note: You have to mask messages even when using a secure socket.RSV1-3 can be ignored, they are for extensions.

The opcode field defines how to interpret the payload data: 0x0 for continuation, 0x1 for text (which is always encoded in UTF-8), 0x2 for binary, and other so-called "control codes" that will be discussed later. In this version of WebSockets, 0x3 to 0x7 and 0xB to 0xF have no meaning.The FIN bit tells whether this is the last message in a series. If it's 0, then the server will keep listening for more parts of the message; otherwise, the server should consider the message delivered. More on this later.

Decoding Payload LengthTo read the payload data, you must know when to stop reading. That's why the payload length is important to know. Unfortunately, this is somewhat complicated. To read it, follow these steps:

Read bits 9-15 (inclusive) and interpret that as an unsigned integer. If it's 125 or less, then that's the length; you're done. If it's 126, go to step 2. If it's 127, go to step 3.
Read the next 16 bits and interpret those as an unsigned integer. You're done.
Read the next 64 bits and interpret those as an unsigned integer (The most significant bit MUST be 0). You're done.
Reading and Unmasking the DataIf the MASK bit was set (and it should be, for client-to-server messages), read the next 4 octets (32 bits); this is the masking key. Once the payload length and masking key is decoded, you can go ahead and read that number of bytes from the socket. Let's call the data ENCODED, and the key MASK. To get DECODED, loop through the octets (bytes a.k.a. characters for text data) of ENCODED and XOR the octet with the (i modulo 4)th octet of MASK. In pseudo-code (that happens to be valid JavaScript):var DECODED = "";
for (var i = 0; i < ENCODED.length; i++) {DECODED[i] = ENCODED[i] ^ MASK[i % 4];
}Now you can figure out what DECODED means depending on your application.
View Code

數(shù)據(jù)幀格式:

FIN:1個比特。

如果是1,表示這是消息(message)的最后一個分片(fragment),如果是0,表示不是是消息(message)的最后一個分片(fragment)。

RSV1, RSV2, RSV3:各占1個比特。

一般情況下全為0。當(dāng)客戶端、服務(wù)端協(xié)商采用WebSocket擴(kuò)展時,這三個標(biāo)志位可以非0,且值的含義由擴(kuò)展進(jìn)行定義。如果出現(xiàn)非零的值,且并沒有采用WebSocket擴(kuò)展,連接出錯。

Opcode: 4個比特。

操作代碼,Opcode的值決定了應(yīng)該如何解析后續(xù)的數(shù)據(jù)載荷(data payload)。如果操作代碼是不認(rèn)識的,那么接收端應(yīng)該斷開連接(fail the connection)。可選的操作代碼如下:%x0:表示一個延續(xù)幀。當(dāng)Opcode為0時,表示本次數(shù)據(jù)傳輸采用了數(shù)據(jù)分片,當(dāng)前收到的數(shù)據(jù)幀為其中一個數(shù)據(jù)分片。
%x1:表示這是一個文本幀(frame)
%x2:表示這是一個二進(jìn)制幀(frame)
%x3-7:保留的操作代碼,用于后續(xù)定義的非控制幀。
%x8:表示連接斷開。
%x9:表示這是一個ping操作。
%xA:表示這是一個pong操作。
%xB-F:保留的操作代碼,用于后續(xù)定義的控制幀。

Mask: 1個比特。

表示是否要對數(shù)據(jù)載荷進(jìn)行掩碼操作。從客戶端向服務(wù)端發(fā)送數(shù)據(jù)時,需要對數(shù)據(jù)進(jìn)行掩碼操作;從服務(wù)端向客戶端發(fā)送數(shù)據(jù)時,不需要對數(shù)據(jù)進(jìn)行掩碼操作。如果服務(wù)端接收到的數(shù)據(jù)沒有進(jìn)行過掩碼操作,服務(wù)端需要斷開連接。如果Mask是1,那么在Masking-key中會定義一個掩碼鍵(masking key),并用這個掩碼鍵來對數(shù)據(jù)載荷進(jìn)行反掩碼。所有客戶端發(fā)送到服務(wù)端的數(shù)據(jù)幀,Mask都是1。掩碼的算法、用途在下一小節(jié)講解。

Payload length:數(shù)據(jù)載荷的長度,單位是字節(jié)。為7位,或7+16位,或1+64位。

假設(shè)數(shù)Payload length === x,如果x為0~126:數(shù)據(jù)的長度為x字節(jié)。
x為126:后續(xù)2個字節(jié)代表一個16位的無符號整數(shù),該無符號整數(shù)的值為數(shù)據(jù)的長度。
x為127:后續(xù)8個字節(jié)代表一個64位的無符號整數(shù)(最高位為0),該無符號整數(shù)的值為數(shù)據(jù)的長度。
此外,如果payload length占用了多個字節(jié)的話,payload length的二進(jìn)制表達(dá)采用網(wǎng)絡(luò)序(big endian,重要的位在前)。

Masking-key:0或4字節(jié)(32位)

所有從客戶端傳送到服務(wù)端的數(shù)據(jù)幀,數(shù)據(jù)載荷都進(jìn)行了掩碼操作,Mask為1,且攜帶了4字節(jié)的Masking-key。如果Mask為0,則沒有Masking-key。備注:載荷數(shù)據(jù)的長度,不包括mask key的長度。

Payload data:(x+y) 字節(jié)

載荷數(shù)據(jù):包括了擴(kuò)展數(shù)據(jù)、應(yīng)用數(shù)據(jù)。其中,擴(kuò)展數(shù)據(jù)x字節(jié),應(yīng)用數(shù)據(jù)y字節(jié)。擴(kuò)展數(shù)據(jù):如果沒有協(xié)商使用擴(kuò)展的話,擴(kuò)展數(shù)據(jù)數(shù)據(jù)為0字節(jié)。所有的擴(kuò)展都必須聲明擴(kuò)展數(shù)據(jù)的長度,或者可以如何計算出擴(kuò)展數(shù)據(jù)的長度。此外,擴(kuò)展如何使用必須在握手階段就協(xié)商好。如果擴(kuò)展數(shù)據(jù)存在,那么載荷數(shù)據(jù)長度必須將擴(kuò)展數(shù)據(jù)的長度包含在內(nèi)。應(yīng)用數(shù)據(jù):任意的應(yīng)用數(shù)據(jù),在擴(kuò)展數(shù)據(jù)之后(如果存在擴(kuò)展數(shù)據(jù)),占據(jù)了數(shù)據(jù)幀剩余的位置。載荷數(shù)據(jù)長度 減去 擴(kuò)展數(shù)據(jù)長度,就得到應(yīng)用數(shù)據(jù)的長度。

實現(xiàn)規(guī)則解碼:

def get_data(info):    #info是我們連接后,接受的數(shù)據(jù)payload_len = info[1] & 127if payload_len == 126:extend_payload_len = info[2:4]mask = info[4:8]decoded = info[8:]elif payload_len == 127:extend_payload_len = info[2:10]mask = info[10:14]decoded = info[14:]else:extend_payload_len = Nonemask = info[2:6]decoded = info[6:]bytes_list = bytearray()    #這里我們使用字節(jié)將數(shù)據(jù)全部收集,再去字符串編碼,這樣不會導(dǎo)致中文亂碼for i in range(len(decoded)):chunk = decoded[i] ^ mask[i % 4]bytes_list.append(chunk)body = str(bytes_list, encoding='utf-8')return body

?實現(xiàn)循環(huán)獲取數(shù)據(jù)

import socket,base64,hashlibdef get_headers(data):'''將請求頭轉(zhuǎn)換為字典'''header_dict = {}data = str(data,encoding="utf-8")header,body = data.split("\r\n\r\n",1)header_list = header.split("\r\n")for i in range(0,len(header_list)):if i == 0:if len(header_list[0].split(" ")) == 3:header_dict['method'],header_dict['url'],header_dict['protocol'] = header_list[0].split(" ")else:k,v=header_list[i].split(":",1)header_dict[k]=v.strip()return header_dictdef get_data(info):payload_len = info[1] & 127if payload_len == 126:extend_payload_len = info[2:4]mask = info[4:8]decoded = info[8:]elif payload_len == 127:extend_payload_len = info[2:10]mask = info[10:14]decoded = info[14:]else:extend_payload_len = Nonemask = info[2:6]decoded = info[6:]bytes_list = bytearray()    #這里我們使用字節(jié)將數(shù)據(jù)全部收集,再去字符串編碼,這樣不會導(dǎo)致中文亂碼for i in range(len(decoded)):chunk = decoded[i] ^ mask[i % 4]    #解碼方式bytes_list.append(chunk)body = str(bytes_list, encoding='utf-8')return bodysock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind(("127.0.0.1",8080))
sock.listen(5)#等待用戶連接
conn,addr = sock.accept()
print("conn from ",conn,addr)
#獲取握手消息,magic string ,sha1加密
#發(fā)送給客戶端
#握手消息
data = conn.recv(8096)headers = get_headers(data)# 對請求頭中的sec-websocket-key進(jìn)行加密
response_tpl = "HTTP/1.1 101 Switching Protocols\r\n" \"Upgrade:websocket\r\n" \"Connection: Upgrade\r\n" \"Sec-WebSocket-Accept: %s\r\n" \"WebSocket-Location: ws://%s%s\r\n\r\n"magic_string = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'value = headers['Sec-WebSocket-Key'] + magic_string
ac = base64.b64encode(hashlib.sha1(value.encode('utf-8')).digest())response_str = response_tpl % (ac.decode('utf-8'), headers['Host'], headers['url'])# 響應(yīng)【握手】信息
conn.send(bytes(response_str, encoding='utf-8'))#可以進(jìn)行通信
while True:data = conn.recv(8096)data = get_data(data)print(data)
服務(wù)端代碼
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body></body>
</html>
<script>ws =new WebSocket("ws://127.0.0.1:8080");ws.onopen = function (ev) { //若是連接成功,onopen函數(shù)會執(zhí)行console.log(22222);ws.send("你好");}
</script>
客戶端代碼

注意:使用控制臺完成發(fā)送,而不是刷新頁面,會報錯,因為我們關(guān)閉了連接,試圖將關(guān)閉信號字節(jié)編碼出錯。這里我們需要利用mask(第二字節(jié)中,1表示連接,0斷開)

六:數(shù)據(jù)發(fā)送規(guī)則(需要發(fā)送二進(jìn)制包struct模塊)

def send_msg(conn, msg_bytes):  """
    WebSocket服務(wù)端向客戶端發(fā)送消息:param conn: 客戶端連接到服務(wù)器端的socket對象,即: conn,address = socket.accept():param msg_bytes: 向客戶端發(fā)送的字節(jié):return: """
    import structtoken = b"\x81"  #接收的第一字節(jié),一般都是x81不變length = len(msg_bytes)if length < 126:token += struct.pack("B", length)elif length <= 0xFFFF:token += struct.pack("!BH", 126, length)else:token += struct.pack("!BQ", 127, length)msg = token + msg_bytesconn.send(msg)return True

實現(xiàn)發(fā)送數(shù)據(jù)

# coding:utf8
# __author:  Administrator
# date:      2018/6/29 0029
# /usr/bin/env python
import socket,base64,hashlibdef get_headers(data):'''將請求頭轉(zhuǎn)換為字典'''header_dict = {}data = str(data,encoding="utf-8")header,body = data.split("\r\n\r\n",1)header_list = header.split("\r\n")for i in range(0,len(header_list)):if i == 0:if len(header_list[0].split(" ")) == 3:header_dict['method'],header_dict['url'],header_dict['protocol'] = header_list[0].split(" ")else:k,v=header_list[i].split(":",1)header_dict[k]=v.strip()return header_dictdef get_data(info):payload_len = info[1] & 127if payload_len == 126:extend_payload_len = info[2:4]mask = info[4:8]decoded = info[8:]elif payload_len == 127:extend_payload_len = info[2:10]mask = info[10:14]decoded = info[14:]else:extend_payload_len = Nonemask = info[2:6]decoded = info[6:]bytes_list = bytearray()    #這里我們使用字節(jié)將數(shù)據(jù)全部收集,再去字符串編碼,這樣不會導(dǎo)致中文亂碼for i in range(len(decoded)):chunk = decoded[i] ^ mask[i % 4]    #解碼方式bytes_list.append(chunk)body = str(bytes_list, encoding='utf-8')return bodydef send_msg(conn, msg_bytes):"""
    WebSocket服務(wù)端向客戶端發(fā)送消息:param conn: 客戶端連接到服務(wù)器端的socket對象,即: conn,address = socket.accept():param msg_bytes: 向客戶端發(fā)送的字節(jié):return:"""
    import structtoken = b"\x81" #接收的第一字節(jié),一般都是x81不變length = len(msg_bytes)if length < 126:token += struct.pack("B", length)elif length <= 0xFFFF:token += struct.pack("!BH", 126, length)else:token += struct.pack("!BQ", 127, length)msg = token + msg_bytesconn.send(msg)return Truesock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind(("127.0.0.1",8080))
sock.listen(5)#等待用戶連接
conn,addr = sock.accept()
#獲取握手消息,magic string ,sha1加密
#發(fā)送給客戶端
#握手消息
data = conn.recv(8096)headers = get_headers(data)# 對請求頭中的sec-websocket-key進(jìn)行加密
response_tpl = "HTTP/1.1 101 Switching Protocols\r\n" \"Upgrade:websocket\r\n" \"Connection: Upgrade\r\n" \"Sec-WebSocket-Accept: %s\r\n" \"WebSocket-Location: ws://%s%s\r\n\r\n"magic_string = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'value = headers['Sec-WebSocket-Key'] + magic_string
ac = base64.b64encode(hashlib.sha1(value.encode('utf-8')).digest())response_str = response_tpl % (ac.decode('utf-8'), headers['Host'], headers['url'])# 響應(yīng)【握手】信息
conn.send(bytes(response_str, encoding='utf-8'))#可以進(jìn)行通信
while True:data = conn.recv(8096)data = get_data(data)print(data)send_msg(conn,bytes(data+"geah",encoding="utf-8"))
服務(wù)端
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body></body>
</html>
<script>ws =new WebSocket("ws://127.0.0.1:8080");ws.onopen = function (ev) { //若是連接成功,onopen函數(shù)會執(zhí)行console.log(22222);ws.send("你好");}ws.onmessage = function (ev) {console.log(ev);}
</script>
前端onmessage 當(dāng)數(shù)據(jù)接收會觸發(fā)

七:tornado實現(xiàn)websocket聊天室

?tornado服務(wù)端

import tornado.ioloop
import tornado.web
import tornado.websocket
import datetimeclass MainHandler(tornado.web.RequestHandler):def get(self):self.render("s1.html")def post(self, *args, **kwargs):passusers = set()
class ChatHandler(tornado.websocket.WebSocketHandler):def open(self, *args, **kwargs):'''客戶端連接'''print("connect....")print(self.request)users.add(self)def on_message(self, message):'''有消息到達(dá)'''now = datetime.datetime.now()content = self.render_string("recv_msg.html",date=now.strftime("%Y-%m-%d %H:%M:%S"),msg=message)for client in users:if client == self:continueclient.write_message(content)def on_close(self):'''客戶端主動關(guān)閉連接'''users.remove(self)st ={"template_path": "template",#模板路徑配置"static_path":'static',
}#路由映射   匹配執(zhí)行,否則404
application = tornado.web.Application([("/index",MainHandler),("/wschat",ChatHandler),
],**st)if __name__=="__main__":application.listen(8080)#io多路復(fù)用tornado.ioloop.IOLoop.instance().start()

前端模板

<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link href="/static/css/bootstrap.min.css" rel="stylesheet"><link href="/static/css/nifty.min.css" rel="stylesheet"><link href="/static/css/demo/nifty-demo-icons.min.css" rel="stylesheet"><link href="/static/css/demo/nifty-demo.min.css" rel="stylesheet"><link href="/static/plugins/pace/pace.min.css" rel="stylesheet"><script src="/static/js/jquery-2.2.4.min.js"></script><script src="/static/plugins/pace/pace.min.js"></script><script src="/static/js/bootstrap.min.js"></script><script src="/static/js/nifty.min.js"></script><script src="/static/js/demo/nifty-demo.min.js"></script><script src="/static/plugins/flot-charts/jquery.flot.min.js"></script><script src="/static/plugins/flot-charts/jquery.flot.resize.min.js"></script><script src="/static/plugins/gauge-js/gauge.min.js"></script><script src="/static/plugins/skycons/skycons.min.js"></script><script src="/static/plugins/easy-pie-chart/jquery.easypiechart.min.js"></script><script src="/static/js/demo/widgets.js"></script>
</head>
<body>
<div id="container" class="effect  aside-bright mainnav-sm aside-right aside-in"><div class="boxed"><div id="content-container"><div class="row"><div class="col-md-8 col-lg-8 col-sm-8"><!--Chat widget--><!--===================================================--><div class="panel" style="height: 640px"><!--Heading--><div class="panel-heading"><h3 class="panel-title">Chat</h3></div><!--Widget body--><div style="height:510px;padding-top:0px;" class="widget-body"><div class="nano"><div class="nano-content pad-all"><ul class="list-unstyled media-block"></ul></div></div><!--Widget footer--><div class="panel-footer" style="height: 90px;"><div class="row"><div class="col-xs-9"><input type="text" placeholder="Enter your text" class="form-control chat-input"></div><div class="col-xs-3"><button class="btn btn-primary btn-block" οnclick="sendMsg(this);" type="submit">Send</button></div></div></div></div></div><!--===================================================--><!--Chat widget--></div><div class="col-md-4 col-lg-4 col-sm-4"><aside id="aside-container"><div id="aside"><div class="nano has-scrollbar"><div class="nano-content" tabindex="0" style="right: -17px;"><!--Nav tabs--><!--================================--><ul class="nav nav-tabs nav-justified"><li class="active"><a href="#demo-asd-tab-1" data-toggle="tab"><i class="demo-pli-speech-bubble-7"></i></a></li></ul><!--================================--><!--End nav tabs--><!-- Tabs Content --><!--================================--><div class="tab-content"><div class="tab-pane fade in active" id="demo-asd-tab-1"><p class="pad-hor text-semibold text-main"><span class="pull-right badge badge-success">0</span> Friends</p></div></div></div><div class="nano-pane" style="display: none;"><div class="nano-slider" style="height: 4059px; transform: translate(0px, 0px);"></div></div></div></div></aside></div></div></div></div>
</div>
</body>
</html><script>ws = new WebSocket("ws://127.0.0.1:8080/wschat");function sendMsg(ths) {var dt = new Date()var now_time = dt.toLocaleString();var msg = $(ths).parents(".row").find(".chat-input").val();$(ths).parents(".row").find(".chat-input").empty();var li = '<li class="mar-btm"><div class="media-right"><img src="" class="img-circle img-sm" alt="Profile Picture"></div>';li += '<div class="media-body pad-hor speech-right"><div class="speech"><a href="#" class="media-heading">游客</a>';li += '<p>'+msg+'</p>';li += '<p class="speech-time">';li += '<i class="demo-pli-clock icon-fw"></i>'+now_time;li += '</p></div></div></li>';$(ths).parents(".widget-body").find(".list-unstyled").append(li);$(ths).parents(".panel-footer").find(".chat-input").val("");ws.send(msg);}ws.onmessage=function (ev) {$(".list-unstyled").append(ev.data);}
</script>
s1.html

消息插件

                                <li class="mar-btm"><div class="media-left"><img src="img/profile-photos/1.png" class="img-circle img-sm" alt="Profile Picture"></div><div class="media-body pad-hor"><div class="speech"><a href="#" class="media-heading">游客</a><p>{{msg}}</p><p class="speech-time"><i class="demo-pli-clock icon-fw"></i>{{date}}</p></div></div></li>
recv_msg.html

實現(xiàn)效果

游客一:

游客二

?

轉(zhuǎn)載于:https://www.cnblogs.com/ssyfj/p/9245150.html

總結(jié)

以上是生活随笔為你收集整理的python---websocket的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

在线 视频 一区二区 | 在线播放第一页 | 99爱这里只有精品 | 欧美日韩久久 | 久久亚洲免费视频 | 91在线中字 | 久久久久久综合网天天 | 91视频 - x99av | 中文字幕黄色网址 | 日本最新中文字幕 | 久久久蜜桃 | www五月婷婷 | 国产午夜三级一区二区三 | 综合色站| 欧美一级高清片 | 午夜av激情 | 五月宗合网| 精品综合久久久 | 亚洲国产高清在线观看视频 | 日女人免费视频 | 欧美色综合久久 | 在线观看国产日韩 | 91污视频在线 | 992tv在线观看网站 | 97电影院网 | 国产麻豆电影 | 久久国产麻豆 | 国内精自线一二区永久 | 成人午夜影院 | 久久久亚洲麻豆日韩精品一区三区 | 天堂av色婷婷一区二区三区 | 日韩久久久久久久久久 | 精品久久影院 | 国内精品福利视频 | 在线观看一级视频 | av网站大全免费 | 免费a级毛片在线看 | 亚洲五月 | 精品国产精品久久一区免费式 | 精品一区二区综合 | 久久免费视频精品 | 色婷婷99 | 中文字幕乱码一区二区 | 天天亚洲| 美女av在线免费 | 久久人人97超碰com | 97超碰在线久草超碰在线观看 | 国产精品字幕 | 最近日本mv字幕免费观看 | 欧美一区视频 | 99在线精品免费视频九九视 | 视频在线观看亚洲 | 91在线影视 | 成年人免费在线观看网站 | 4438全国亚洲精品观看视频 | wwwwwww黄| 亚洲精品国产精品国自产 | 日本韩国精品一区二区在线观看 | 在线免费高清一区二区三区 | 欧美黄色特级片 | 免费久久久久久久 | 99高清视频有精品视频 | 在线91精品 | 久久久在线观看 | 亚洲a网| 中文乱码视频在线观看 | 亚洲性xxxx | 日日射天天射 | 最近更新中文字幕 | 久久成人国产精品一区二区 | 国产尤物一区二区三区 | 九草视频在线观看 | 久久久高清 | av在线电影播放 | av三区在线 | 欧美成年性 | av成人免费网站 | 中文字幕国产一区二区 | 国产在线视频导航 | 免费的国产精品 | 久久女同性恋中文字幕 | 久久9精品 | 亚洲天天在线日亚洲洲精 | 色橹橹欧美在线观看视频高清 | 高清不卡一区二区在线 | 97在线观看免费观看 | 国产精品免费观看国产网曝瓜 | 一区二区三区视频在线 | 黄色天堂在线观看 | 免费又黄又爽的视频 | 在线观看 国产 | 最新色站| 97网| 久久69精品 | 亚洲成人精品在线 | 91探花视频 | 国产婷婷在线观看 | 色多多视频在线观看 | 国产精品久久久久久久7电影 | 久久久免费网站 | 麻花传媒mv免费观看 | 久久久国产精品视频 | 国产精品18久久久久久不卡孕妇 | 中文字幕一区二区在线观看 | 久久精品久久精品 | 91大神精品视频 | 91av观看| 国产一二区免费视频 | 精壮的侍卫呻吟h | 国产精品手机视频 | 狠狠狠狠狠狠天天爱 | 在线观看中文字幕 | 国产午夜三级一区二区三桃花影视 | 国产精久久久久久妇女av | 狠狠狠狠狠狠狠干 | 天天综合亚洲 | 成人三级网址 | 成人免费视频视频在线观看 免费 | 国产婷婷色 | 最近最新mv字幕免费观看 | 奇米影音四色 | 国产精品毛片久久久久久久久久99999999 | 国产色视频网站 | 中文字幕乱在线伦视频中文字幕乱码在线 | 精品国产1区2区3区 国产欧美精品在线观看 | 久久精品观看 | 国内精品久久久久久久久久 | 久久五月天色综合 | 亚洲精品在线观看中文字幕 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产一区欧美一区 | 天天插天天干天天操 | 成人禁用看黄a在线 | 国产视频一区精品 | 色婷婷88av视频一二三区 | 毛片基地黄久久久久久天堂 | 国产精品一区二区吃奶在线观看 | 日韩免费大片 | 91观看视频 | 国产精品v欧美精品v日韩 | 日韩精品在线观看av | 成人免费av电影 | 97热久久免费频精品99 | 国产日韩精品欧美 | 久久精品香蕉视频 | 超碰97在线看 | 婷婷中文字幕综合 | 久久综合之合合综合久久 | 一区二区不卡在线观看 | 黄色毛片在线看 | 亚洲永久av| 欧美另类v| 不卡视频一区二区三区 | 欧美日韩性 | 国产成人免费在线 | 黄色片网站av | 人人精品久久 | 综合久久婷婷 | 国产夫妻性生活自拍 | 国产手机在线播放 | 久草香蕉在线 | www.黄色片网站 | 偷拍福利视频一区二区三区 | 毛片视频电影 | 日本黄色一级电影 | 久久精品96 | 丁香久久久 | 亚洲激情p| av成人动漫在线观看 | 久久久久久久亚洲精品 | 999热线在线观看 | 麻豆成人小视频 | 韩国一区二区av | 天天爽夜夜操 | www色com | 丁香av | 久草视频在线新免费 | 91传媒在线观看 | 中文字幕高清免费日韩视频在线 | 精品999久久久 | www日日| 国产成人精品999在线观看 | 国产精品五月天 | 国产色妞影院wwwxxx | 久久久观看 | 日韩av伦理片 | 中文字幕精品一区二区三区电影 | 欧美狠狠色 | 亚洲永久av | 国产真实精品久久二三区 | av电影在线免费观看 | 中文字幕刺激在线 | 99精品免费久久久久久久久 | 天天操狠狠干 | 免费一级片视频 | 深爱激情五月婷婷 | 久久精品视频网站 | 一级片免费视频 | 九九九九九国产 | 日韩在线一区二区免费 | 四虎8848免费高清在线观看 | 国产一区视频免费在线观看 | 日日干干 | 天天操操操操操 | 免费a v视频| 日韩中文字幕视频在线 | 99在线精品视频在线观看 | 人人爽久久涩噜噜噜网站 | 九九视频这里只有精品 | 久久伊99综合婷婷久久伊 | 最近高清中文字幕 | 欧美精品久久天天躁 | 欧美久久久久久久久中文字幕 | 在线观看av免费观看 | 97人人模人人爽人人喊网 | 九九在线国产视频 | 亚洲精品久久久久www | 欧美日韩在线观看一区二区三区 | 91福利视频久久久久 | 在线免费黄色av | 国产91粉嫩白浆在线观看 | 久久久精品午夜 | 中文在线免费看视频 | 色婷婷久久一区二区 | a在线免费 | 99精品国产99久久久久久97 | 国产精品不卡在线播放 | 黄色大全视频 | 九九热在线观看 | 国产啊v在线观看 | 友田真希x88av | 69av视频在线观看 | 亚洲女裸体 | 综合网五月天 | 99国产精品久久久久久久久久 | 99999精品| 国产高清视频色在线www | 最新真实国产在线视频 | 亚洲婷婷免费 | 久久久五月天 | 超碰电影在线观看 | 日本中文在线 | 在线涩涩| 在线免费av电影 | 日韩中文字幕免费在线播放 | 色婷婷播放| 在线观看精品 | 91日韩免费 | 中文字幕a∨在线乱码免费看 | av在线精品| 国产婷婷色 | 超级碰碰碰免费视频 | 国产在线高清 | 久草观看视频 | 久久免费大片 | 视频一区视频二区在线观看 | 亚洲成人在线免费 | 五月天激情综合 | 亚洲日韩欧美一区二区在线 | 一区二区不卡高清 | 中文字幕在线日本 | 在线观看mv的中文字幕网站 | 九九在线视频免费观看 | 亚洲精品动漫久久久久 | 久久99在线观看 | 黄免费网站 | 国产精品电影在线 | 国产高清99| 免费看搞黄视频网站 | 久久午夜免费视频 | 91av在线国产| 日韩91精品 | 超碰久热 | 99视频在线免费观看 | 亚洲情影院 | 国产精品美女久久久久久2018 | 香蕉在线播放 | 国产美女网站在线观看 | 少妇做爰k8经典 | 婷婷5月色 | 成人av网站在线观看 | 日韩一区二区三区免费视频 | 亚洲精品午夜一区人人爽 | 国产精品99久久久久久武松影视 | av黄色一级片 | 色综合久久88色综合天天6 | 久久综合久久综合久久综合 | 黄网站色欧美视频 | 91成人免费观看视频 | 国产午夜精品一区二区三区 | 免费a网站| 午夜av在线电影 | 亚洲一级黄色 | 91视频在线观看免费 | 国产第页 | 四虎最新域名 | 热99在线视频 | 国产a免费| 国产精品嫩草影院123 | 久久国语| 亚洲免费小视频 | 黄色a在线 | 久久乐九色婷婷综合色狠狠182 | 国产精品乱码高清在线看 | 天堂av高清 | 99久久久久成人国产免费 | 99色视频 | 蜜臀av夜夜澡人人爽人人桃色 | 狠狠色丁香婷婷综合久久片 | 国产99久久99热这里精品5 | 国产91粉嫩白浆在线观看 | 欧美色图p | 欧美日韩精品在线视频 | 国产精品免费在线观看视频 | 黄色免费观看视频 | 在线成人免费 | 久久最新网址 | 日韩精品中文字幕在线播放 | 国产91精品在线播放 | 丁香婷婷激情 | 夜夜澡人模人人添人人看 | 久久久久久久久网站 | 狠狠地操| 国产精品porn | 在线中文字幕av观看 | 久久这里精品视频 | 999久久久精品视频 日韩高清www | 免费高清男女打扑克视频 | 97在线视频免费播放 | 激情久久一区二区三区 | 日韩精品欧美精品 | 成人app在线免费观看 | 综合网在线视频 | 久久久精品免费看 | 免费中午字幕无吗 | 国产精品成人aaaaa网站 | 日韩精品中文字幕在线播放 | 成人午夜电影在线播放 | 色全色在线资源网 | 国产精品视频永久免费播放 | www在线观看国产 | www.久草.com| 久久99操| 五月天激情在线 | 中文字幕免费一区二区 | 欧美黑人性猛交 | 69人人| 国产精品久久中文字幕 | 中国一级片在线观看 | 日韩精品最新在线观看 | 国产精品婷婷午夜在线观看 | 亚洲成人高清在线 | 久久精品视频3 | 五月婷久| 国产精品中文字幕在线 | 国产免费作爱视频 | av免费在线免费观看 | 国产香蕉久久精品综合网 | 天天天综合网 | 欧美成人性战久久 | 国产精品成人免费 | 久久天天躁狠狠躁亚洲综合公司 | 99久免费精品视频在线观看 | 天天干天天操天天爱 | 香蕉网站在线观看 | 国内精品美女在线观看 | www.69xx| 91精品网站在线观看 | 成 人 免费 黄 色 视频 | av免费在线观 | 四虎在线免费视频 | 亚洲国产中文字幕在线视频综合 | 日本黄色a级大片 | 中国成人一区 | 婷婷av色综合 | 91av电影网| 成人免费视频观看 | 狠狠干天天干 | av免费在线网 | 欧美日韩精品在线观看 | 久久午夜影院 | 成片免费观看视频999 | 96久久| 日日夜夜天天射 | 日韩高清一区 | 玖玖爱国产在线 | 成人永久在线 | 激情五月婷婷综合网 | 99久久精品免费看国产麻豆 | 91激情视频在线播放 | 深夜免费小视频 | 日韩精品一区二区三区视频播放 | 在线观看视频中文字幕 | 亚洲小视频在线 | 丁香六月婷婷激情 | 91视频免费视频 | 国产精品18久久久久久首页狼 | 丰满少妇久久久 | 国产字幕在线播放 | 亚洲精品国产视频 | 国产精品麻豆欧美日韩ww | 亚洲精品视频免费在线 | 999国内精品永久免费视频 | 亚洲午夜av电影 | 国产日韩在线一区 | 美女黄视频免费看 | 深爱婷婷网| 欧美a影视 | 国产亚洲精品电影 | 五月天色丁香 | 最近字幕在线观看第一季 | 美女网站免费福利视频 | 91精品在线免费视频 | 综合在线观看色 | 91九色蝌蚪视频网站 | 色悠悠久久综合 | 天天射射天天 | 在线免费成人 | 超碰电影在线观看 | 亚洲国产影院 | 制服丝袜欧美 | 国产精品高潮呻吟久久久久 | av网站在线观看免费 | 五月天综合色激情 | 久久久影院官网 | 91热精品 | 久久久久久久久久亚洲精品 | 探花视频在线观看 | 一区二区视频在线免费观看 | 久久久资源 | 日韩电影在线观看一区二区三区 | 午夜私人影院 | 全黄网站 | 成人sm另类专区 | 又黄又爽又色无遮挡免费 | 天天曰天天爽 | 视频国产精品 | 国产精品美女久久久久久久久久久 | 亚洲国产中文字幕在线视频综合 | 精品中文字幕在线观看 | 久久字幕 | 在线天堂日本 | 久久综合欧美精品亚洲一区 | 毛片网站免费在线观看 | 麻豆91视频 | 插插插色综合 | 日本久久精品视频 | 色婷婷视频 | 人人超碰在线 | 国产精品成人一区二区三区吃奶 | 日韩中文字幕免费在线观看 | 国产视频一区二区三区在线 | 久久精品国产亚洲 | 婷婷久久综合网 | 久久国产精品一区二区 | 精品二区视频 | 国产片网站 | 欧美影片 | 国产成人三级在线 | 精品伦理一区二区三区 | 四月婷婷在线观看 | 久久精品国产99国产 | 狠狠色丁香婷婷综合橹88 | 久久精品国产精品亚洲 | 欧美亚洲另类在线视频 | 久久精品国产v日韩v亚洲 | 亚洲最大av | 久久精品视频网站 | 国产精品一区二区吃奶在线观看 | 一区二区不卡 | 欧美日韩3p| 欧美性大胆| 日韩av一区二区在线 | japanese黑人亚洲人4k | 欧美aaa大片 | 久热只有精品 | 欧美午夜性 | 一级片免费视频 | 亚洲日本va午夜在线电影 | 亚洲精品久久久久久久不卡四虎 | 99免费在线视频 | 国产理论影院 | 狠狠色婷婷丁香六月 | 久热国产视频 | 国产一及片| 天天操欧美 | 视频一区在线免费观看 | 久草在线免费资源站 | 国产精品男女 | 国产最新视频在线 | 欧美日韩三级 | 91久久久久久国产精品 | 亚洲另类视频在线 | 99久久久久国产精品免费 | 欧美精品xx | 99色资源 | 中文字幕亚洲情99在线 | 欧美精品久久久久久久免费 | 日韩中文字幕免费在线播放 | 婷婷色网视频在线播放 | 99久久精品国产欧美主题曲 | 色99之美女主播在线视频 | 成人av片免费观看app下载 | 国内精品福利视频 | 91av视频免费观看 | 欧美久久久影院 | 国产91丝袜在线播放动漫 | av大片网址 | 欧美久久电影 | 青青五月天 | 国产99黄 | 中文字幕中文字幕中文字幕 | 国产高清精品在线观看 | 99视频+国产日韩欧美 | 欧美一级电影 | 亚洲精品乱码久久久久久蜜桃欧美 | 国产亚洲一区 | 精品 激情 | 国产中文字幕视频在线观看 | 亚洲人av免费网站 | 国产精品综合在线观看 | 午夜精品久久久久久中宇69 | 色欧美88888久久久久久影院 | 国产网站av| 国产资源网 | 色噜噜日韩精品一区二区三区视频 | 久草在线免费资源站 | 国产成人一区二区三区在线观看 | 久久国产精品免费一区 | 成人av影视 | 玖操| 国产精品久久久久一区二区三区共 | 丁香激情综合 | 伊人午夜 | av高清一区| 国产精品自产拍在线观看桃花 | 91av福利视频 | 91免费看黄色 | 久久大片| 激情五月激情综合网 | 国产91精品久久久久久 | 久久婷婷一区二区三区 | 99在线播放 | 久久99国产视频 | 精品视频免费观看 | 永久免费的啪啪网站免费观看浪潮 | 免费中文字幕 | 日韩免费在线观看视频 | 99久久精品久久亚洲精品 | 一区二区三区久久精品 | 永久免费毛片在线观看 | 国产91探花 | 久草在线视频免赞 | 伊人影院得得 | 天天操天天添天天吹 | 久久精品国产亚洲aⅴ | 丁香花在线观看免费完整版视频 | 视色网站 | 亚洲区视频在线观看 | 欧美激情第八页 | 91福利影院在线观看 | 成年人黄色大片在线 | 欧美一级视频在线观看 | 麻豆精品传媒视频 | 九九热久久久 | 91九色蝌蚪视频网站 | 中文字幕在线观看1 | 精品日韩中文字幕 | 国产在线1区 | 美女在线国产 | 激情婷婷久久 | 婷婷丁香久久五月婷婷 | 欧美在线free | 开心激情婷婷 | 2019中文最近的2019中文在线 | 欧美日韩性 | 成人在线免费观看视视频 | 香蕉视频亚洲 | 久草视频在线免费 | 美女久久一区 | 特级黄色一级 | 国产成人免费av电影 | 久久久精品在线观看 | 成人av在线电影 | 一性一交视频 | 99精品一区| 日韩色在线| 亚洲精品国产高清 | 在线观看免费高清视频大全追剧 | 免费在线观看亚洲视频 | 欧美另类亚洲 | 黄色影院在线播放 | 青青草国产精品视频 | 国产精品午夜免费福利视频 | 国产99久久久久久免费看 | 91成人精品| 国产精品一区在线观看 | 久99久精品| 91中文字幕在线播放 | 五月婷婷丁香激情 | 精品久久九九 | 国产va在线观看免费 | 亚洲欧美偷拍另类 | 九九久久国产精品 | 狠狠网 | 999久久久久久久久久久 | 久久久精品欧美 | 亚洲免费观看在线视频 | 国内精品久久久久久久97牛牛 | 久热色超碰 | 免费高清在线一区 | 色小说av| 国产91在线播放 | 成人毛片网 | 人人射网站 | 天天爽天天射 | 国产精品18久久久久久久久久久久 | 一级黄色在线免费观看 | 天天操天天干天天摸 | 国产精品3区 | 久久桃花网 | 亚洲国产日本 | 伊人婷婷在线 | 国产精品igao视频网网址 | 国产美腿白丝袜足在线av | 亚洲综合涩 | 欧美精品亚洲精品日韩精品 | av久久久| 色在线免费视频 | 天堂av在线网站 | 日韩大片在线 | 24小时日本在线www免费的 | 成人黄色毛片视频 | 探花视频免费观看高清视频 | 91免费观看视频在线 | 成人网在线免费视频 | 99热官网 | 五月激情站 | 丁香九月婷婷综合 | 黄色小视频在线观看免费 | av夜夜操| 在线观看黄色大片 | 麻豆国产在线播放 | 国产999| 国产这里只有精品 | 99国产成+人+综合+亚洲 欧美 | 美女亚洲精品 | 91在线看黄 | 免费一级特黄毛大片 | 狠狠伊人 | 99精品视频在线看 | 精品国产一二三 | 国产.精品.日韩.另类.中文.在线.播放 | 国内成人精品视频 | 国产精品va在线播放 | 欧美性久久久久久 | 中文字幕在线观看免费 | 操操操日日日干干干 | 91麻豆国产 | 九九色在线观看 | 国产精品亚洲视频 | 亚洲精品久久久蜜桃 | 亚洲精品美女久久 | 91在线观看视频 | 日韩精品第一区 | 天堂在线免费视频 | 91九色在线视频 | 网址你懂的在线观看 | 五月婷婷丁香综合 | 亚洲 综合 精品 | 在线观看蜜桃视频 | 日韩一区二区三区高清免费看看 | 免费日韩一区 | 五月婷婷黄色 | 91视频啊啊啊 | 日韩欧美在线免费观看 | 亚洲精品国产精品国自产观看 | 99在线视频精品 | 在线观看中文字幕第一页 | 91亚洲国产 | 欧美与欧洲交xxxx免费观看 | 亚洲激情在线观看 | 日韩大片免费在线观看 | 高清一区二区三区av | 精品视频资源站 | 国产精品理论在线观看 | 欧美一级特黄aaaaaa大片在线观看 | 2021国产在线 | 国产精品久久电影观看 | 久久久久夜色 | 国产精久久久 | 国产精品18毛片一区二区 | 99久久久国产精品免费99 | 91探花国产综合在线精品 | 国产午夜精品久久 | 久久色视频 | 成年人视频在线免费 | 中文在线免费看视频 | 狠狠色婷婷丁香六月 | 精品国产亚洲一区二区麻豆 | 中文字幕日韩一区二区三区不卡 | av电影免费在线 | 深爱激情av | 欧美精品国产综合久久 | 人人澡超碰碰 | 日本久久不卡视频 | av中文字幕亚洲 | 日韩中文字幕视频在线 | 天天操操操操操操 | 探花视频在线版播放免费观看 | 日韩区欧美久久久无人区 | 青春草视频在线播放 | 成人久久| 国内视频1区 | 欧美福利视频一区 | 欧美一进一出抽搐大尺度视频 | 在线观看a视频 | 四虎免费av| 人人干天天射 | 在线成人中文字幕 | 国产视频 亚洲精品 | 天天操天天添 | 二区精品视频 | 99av国产精品欲麻豆 | 日产乱码一二三区别在线 | 99久精品 | 欧美韩日视频 | 人人干干人人 | 亚洲日韩中文字幕 | 精品国产一区二区在线 | 在线看的av网站 | 亚洲日本va中文字幕 | 天天色视频 | 日韩av中文字幕在线免费观看 | 在线观看亚洲免费视频 | 色噜噜狠狠狠狠色综合久不 | 婷婷视频在线播放 | 一区二区男女 | 五月天国产精品 | 日本成址在线观看 | 国产免费小视频 | 国产手机在线 | 一区二区三区在线观看免费视频 | 在线亚洲激情 | 国产一区二区三区免费视频 | 精品女同一区二区三区在线观看 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 亚洲免费在线观看视频 | 青青河边草免费观看完整版高清 | 日本精品视频一区 | 麻豆免费在线播放 | 激情亚洲综合在线 | 91尤物国产尤物福利在线播放 | 久久久免费网站 | 不卡av电影在线观看 | 最近免费在线观看 | 狠狠狠色丁香婷婷综合久久88 | 国产一区二区三区免费观看视频 | 精品久久一 | 丁香视频五月 | 日韩精品在线视频免费观看 | 伊人资源视频在线 | 香蕉在线视频播放网站 | 不卡av免费在线观看 | 成年人在线免费视频观看 | 国产精品美女久久久久久网站 | 在线精品视频免费播放 | 超级av在线 | 不卡电影免费在线播放一区 | 久久艹精品 | 999久久久久久久久 69av视频在线观看 | 日本久久久影视 | 天天操天天操天天操 | 欧美一区免费观看 | 久久精品综合一区 | 免费观看十分钟 | 国内免费久久久久久久久久久 | 精品福利网 | 久久av观看 | 色天天综合网 | 成人精品一区二区三区中文字幕 | 久久色在线播放 | 欧洲亚洲女同hd | 国产成人精品久久亚洲高清不卡 | 涩涩网站在线看 | 欧美亚洲xxx | 豆豆色资源网xfplay | 国产精品毛片一区视频播 | 四虎成人精品永久免费av | 国产亚洲午夜高清国产拍精品 | 欧美影院久久 | 九七在线视频 | 美女性爽视频国产免费app | 免费亚洲成人 | 午夜av不卡| 久久久免费观看完整版 | 99国内精品 | 在线看黄色av | 亚洲精品玖玖玖av在线看 | 中文在线字幕免费观看 | 欧美精品中文 | 久久一区二区三区四区 | 成人性生交大片免费观看网站 | 婷婷精品 | 一区二区三区韩国免费中文网站 | 色综合久久88色综合天天免费 | 国产不卡毛片 | 亚洲国产日韩精品 | 亚洲视频大全 | 久久九九影院 | 国产xxxxx在线观看 | 中文字幕视频观看 | 亚洲精品男女 | 国产精品va在线观看入 | 99久久精品国产欧美主题曲 | 免费看国产一级片 | 久久久久久久久久久久国产精品 | 一级精品视频在线观看宜春院 | 亚洲一区不卡视频 | 国产91在| 久久久精品免费看 | 亚洲精品成人网 | 久久亚洲二区 | 日狠狠 | a视频免费 | 亚洲精品91天天久久人人 | 欧美综合在线视频 | 中文字幕久久网 | 91成人看片| 免费福利在线视频 | 在线观看91精品视频 | 日本性xxxxx 亚洲精品午夜久久久 | 三级黄色大片在线观看 | 黄污污网站 | 亚洲精品欧美视频 | 国内揄拍国内精品 | 黄a在线观看 | 一本一本久久a久久精品综合小说 | 91自拍91 | 手机看片 | 欧美日韩a视频 | 综合网伊人| 激情电影影院 | 婷婷在线播放 | 我要看黄色一级片 | 黄色www在线观看 | 久久国产一区二区三区 | 成人免费毛片aaaaaa片 | 91精品国产综合久久福利不卡 | 96亚洲精品久久 | 麻豆小视频在线观看 | 天天干天天想 | 九色自拍视频 | 国产伦精品一区二区三区免费 | 91成人看片 | 亚洲成aⅴ人在线观看 | 五月婷婷一区 | 天天玩夜夜操 | 天天弄天天干 | 黄色91免费观看 | 久久婷婷国产色一区二区三区 | 亚州激情视频 | 婷婷九月丁香 | 免费在线激情电影 | 欧美一区二区日韩一区二区 | 精品96久久久久久中文字幕无 | 国产精品九九视频 | 久久99亚洲热视 | 亚洲黄色片一级 | 天天射天天操天天色 | 国产五码一区 | 亚洲精品在线播放视频 | 国产在线不卡精品 | www.亚洲激情.com | 午夜精品99久久免费 | 天天曰视频 | 亚洲午夜久久久综合37日本 | 四虎影视av | 波多野结衣日韩 | 麻豆视频在线免费观看 | 香蕉视频在线播放 | 丝袜精品视频 | 国产精品一区二区三区在线免费观看 | 99999精品| 99爱精品视频| 人人干人人做 | 色婷婷精品 | av电影在线免费观看 | 一区二区三区av在线 | 亚洲高清在线视频 | 不卡av电影在线 | 午夜男人影院 | 中文字幕中文中文字幕 | 国产一区二区三区在线 | 99热最新| 亚洲国产美女精品久久久久∴ | 婷婷色综合色 | 少妇性bbb搡bbb爽爽爽欧美 | 亚洲国产日韩av | 日韩三级在线观看 | 国内精品久久久久久久久久久 | 亚洲年轻女教师毛茸茸 | 国内精品毛片 | 开心激情五月婷婷 | 精品日韩av| 国产美女精品在线 | 国产亚洲免费的视频看 | 91成年人在线观看 | 国产黄免费看 | 亚洲三级性片 | 久久激情视频 | 成人毛片在线视频 | av爱干| www.久久久 | 日本激情视频中文字幕 | 亚洲国产日韩一区 | 韩日精品在线 | 人人爽人人爽人人片 | www..com黄色片| 成年一级片 | 久久久高清一区二区三区 | 欧美资源 | 欧美福利视频一区 | 国产精品黄色在线观看 | 亚洲视频www| 欧美另类高潮 | 国产亚洲高清视频 | 免费久久久久久久 | 93久久精品日日躁夜夜躁欧美 | 国产美女视频一区 | 中文字幕在线观看完整 | 久草在线费播放视频 | 五月天国产精品 | 一区二区三区视频在线 | 国产理论片在线观看 | av888.com| 四虎影视成人精品国库在线观看 | 亚洲精品视频www | 亚洲小视频在线 | 91精品国产成人观看 | 看av免费网站 | 国产乱对白刺激视频不卡 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 成人在线播放网站 | 美女精品久久久 | 一区二区视频在线播放 | 成人v | 亚洲激情在线观看 | 综合网伊人 | 久草久 | 超碰在线99 | 久久久网 | 成人中文字幕+乱码+中文字幕 | 久久一本综合 | 日韩网站中文字幕 | 午夜免费在线观看 | 一区二区三区免费在线观看 | 99精品视频一区二区 | 久久成年人视频 | 欧美一区三区四区 | 国产中文字幕视频在线 | 国产精品女教师 | 亚洲在线视频网站 | 国产一区二三区好的 | 色综合 久久精品 | 玖玖爱免费视频 | 天堂网在线视频 | 免费热情视频 | 亚洲精品国内 | 在线 成人 | 久草精品电影 | 911国产精品 | 欧美一区中文字幕 | 久久国产视屏 | 欧美日韩精品在线一区二区 | 日日夜夜狠狠操 | 人人舔人人插 | 激情偷乱人伦小说视频在线观看 | 人人狠狠综合久久亚洲 | 久草在线免费新视频 | 久草精品免费 | 色综合久久久久综合体桃花网 | 天天射天天干 | 天天激情在线 | 国产二区视频在线观看 | 成人免费观看a | www.eeuss影院av撸 | 亚洲综合在线一区二区三区 | 黄色中文字幕在线 | 日韩欧美综合精品 | 国产精品手机播放 | 亚洲最大成人免费网站 | 久久精品一区二区三 | 五月婷婷电影网 | 国产一级视频在线 | 特级西西www44高清大胆图片 | 天天综合天天做 | 国产婷婷色 |