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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【愚公系列】2022年11月 .NET CORE工具案例-.NET 7中的WebTransport通信

發布時間:2024/3/13 asp.net 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【愚公系列】2022年11月 .NET CORE工具案例-.NET 7中的WebTransport通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
    • 1.技術背景
    • 2.QUIC相關概念
    • 3.HTTP/3.0
  • 一、WebTransport
    • 1.WebTransport概念
    • 2.WebTransport在js中的使用
    • 3.WebTransport在.NET 7中的使用
      • 3.1 創建項目
      • 3.2 偵聽HTTP/3端口
      • 3.3 獲取WebTransport會話
      • 3.4 監聽WebTransport請求
    • 4.WebTransport在JavaScript中使用
      • 4.1 創建 WebTransport 實例
      • 4.2 通信測試
  • 二、WebTransport通信完整源碼
    • 1.服務端
    • 2.客戶端
    • 3.效果


前言

1.技術背景

如今對于網絡進行實時通訊的要求越來越高,相關于網絡進行實時通訊技術應運而生,如WebRTC,QUIC,HTTP3,WebTransport,WebAssembly,WebCodecs等。

2.QUIC相關概念

QUIC相關文章請看:https://blog.csdn.net/aa2528877987/article/details/127744186

3.HTTP/3.0

  • 基于QUIC協議:天然復用QUIC的各種優勢;
  • 新的HTTP頭壓縮機制:QPACK,是對HTTP/2中使用的HPACK的增強。在QPACK下,HTTP頭可以在不同的QUIC流中不按順序到達。

一、WebTransport

1.WebTransport概念

WebTransport 是一個協議框架,該協議使客戶端與遠程服務器在安全模型下通信,并且采用安全多路復用傳輸技術。最新版的WebTransport草案中,該協議是基于HTTP3的,即WebTransport可天然復用QUIC和HTTP3的特性。

WebTransport 是一個新的 Web API,使用 HTTP/3 協議來支持雙向傳輸。它用于 Web 客戶端和 HTTP/3 服務器之間的雙向通信。它支持通過 不可靠的 Datagrams API 發送數據,也支持可靠的 Stream API 發送數據。

WebTransport 支持三種不同類型的流量:數據報(datagrams) 以及單向流和雙向流。

WebTransport 的設計基于現代 Web 平臺基本類型(比如 Streams API)。它在很大程度上依賴于 promise,并且可以很好地與 async 和 await 配合使用。

2.WebTransport在js中的使用

W3C的文檔關于支持WebTransport的后臺服務進行通信:https://www.w3.org/TR/webtransport/

let transport = new WebTransport("https://x.x.x.x"); await transport.ready; let stream = await transport.createBidirectionalStream(); let encoder = new TextEncoder(); let writer = stream.writable.getWriter(); await writer.write(encoder.encode("Hello, world! What's your name?")) writer.close(); console.log(await new Response(stream.readable).text());

3.WebTransport在.NET 7中的使用

3.1 創建項目

新建一個.NET Core 的空項目,修改 csproj 文件

<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>net7.0</TargetFramework><Nullable>enable</Nullable><ImplicitUsings>enable</ImplicitUsings><AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel><!-- 1.Turn on preview features --><EnablePreviewFeatures>True</EnablePreviewFeatures></PropertyGroup><ItemGroup><!-- 2.Turn on the WebTransport AppContext switch --><RuntimeHostConfigurationOption Include="Microsoft.AspNetCore.Server.Kestrel.Experimental.WebTransportAndH3Datagrams" Value="true" /></ItemGroup></Project>

3.2 偵聽HTTP/3端口

要設置 WebTransport 連接,首先需要配置 Web 主機并通過 HTTP/3 偵聽端口:

// 配置端口 builder.WebHost.ConfigureKestrel((context, options) => {// 配置web站點端口options.Listen(IPAddress.Any, 5551, listenOptions =>{listenOptions.UseHttps();listenOptions.Protocols = HttpProtocols.Http1AndHttp2;});// 配置webtransport端口options.Listen(IPAddress.Any, 5552, listenOptions =>{listenOptions.UseHttps(certificate);listenOptions.UseConnectionLogging();listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;}); });

3.3 獲取WebTransport會話

app.Run(async (context) => {var feature = context.Features.GetRequiredFeature<IHttpWebTransportFeature>();if (!feature.IsWebTransportRequest){return;}var session = await feature.AcceptAsync(CancellationToken.None); });await app.RunAsync();

3.4 監聽WebTransport請求

var stream = await session.AcceptStreamAsync(CancellationToken.None);var inputPipe = stream.Transport.Input; var outputPipe = stream.Transport.Output;

4.WebTransport在JavaScript中使用

4.1 創建 WebTransport 實例

傳入服務地址并創建 WebTransport 實例, transport.ready 完成,此時連接就可以使用了。

const url = 'https://localhost:5002'; const transport = new WebTransport(url);await transport.ready;

4.2 通信測試

// Send two Uint8Arrays to the server. const stream = await transport.createSendStream(); const writer = stream.writable.getWriter(); const data1 = new Uint8Array([65, 66, 67]); const data2 = new Uint8Array([68, 69, 70]); writer.write(data1); writer.write(data2); try {await writer.close();console.log('All data has been sent.'); } catch (error) {console.error(`An error occurred: ${error}`); }

二、WebTransport通信完整源碼

1.服務端

// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable enableusing System.Net; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Connections.Features; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.Kestrel.Core;var builder = WebApplication.CreateBuilder(args);// 生成密鑰 var certificate = GenerateManualCertificate(); var hash = SHA256.HashData(certificate.RawData); var certStr = Convert.ToBase64String(hash);// 配置端口 builder.WebHost.ConfigureKestrel((context, options) => {// 配置web站點端口options.Listen(IPAddress.Any, 5551, listenOptions =>{listenOptions.UseHttps();listenOptions.Protocols = HttpProtocols.Http1AndHttp2;});// 配置webtransport端口options.Listen(IPAddress.Any, 5552, listenOptions =>{listenOptions.UseHttps(certificate);listenOptions.UseConnectionLogging();listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;}); });var app = builder.Build();// 使可index.html訪問 app.UseFileServer();app.Use(async (context, next) => {// 配置/certificate.js以注入證書哈希if (context.Request.Path.Value?.Equals("/certificate.js") ?? false){context.Response.ContentType = "application/javascript";await context.Response.WriteAsync($"var CERTIFICATE = '{certStr}';");}// 配置服務器端應用程序else{//判斷是否是WebTransport請求var feature = context.Features.GetRequiredFeature<IHttpWebTransportFeature>();if (!feature.IsWebTransportRequest){await next(context);}//獲取判斷是否是WebTransport請求會話var session = await feature.AcceptAsync(CancellationToken.None);if (session is null){return;}while (true){ConnectionContext? stream = null;IStreamDirectionFeature? direction = null;// 等待消息stream = await session.AcceptStreamAsync(CancellationToken.None);if (stream is not null){direction = stream.Features.GetRequiredFeature<IStreamDirectionFeature>();if (direction.CanRead && direction.CanWrite){//單向流_ = handleBidirectionalStream(session, stream);}else{//雙向流_ = handleUnidirectionalStream(session, stream);}}}} });await app.RunAsync();static async Task handleUnidirectionalStream(IWebTransportSession session, ConnectionContext stream) {var inputPipe = stream.Transport.Input;// 將流中的一些數據讀入內存var memory = new Memory<byte>(new byte[4096]);while (!stream.ConnectionClosed.IsCancellationRequested){var length = await inputPipe.AsStream().ReadAsync(memory);var message = Encoding.Default.GetString(memory[..length].ToArray());await ApplySpecialCommands(session, message);Console.WriteLine("RECEIVED FROM CLIENT:");Console.WriteLine(message);} }static async Task handleBidirectionalStream(IWebTransportSession session, ConnectionContext stream) {var inputPipe = stream.Transport.Input;var outputPipe = stream.Transport.Output;// 將流中的一些數據讀入內存var memory = new Memory<byte>(new byte[4096]);while (!stream.ConnectionClosed.IsCancellationRequested){var length = await inputPipe.AsStream().ReadAsync(memory);// 切片以僅保留內存的相關部分var outputMemory = memory[..length];// 處理特殊命令await ApplySpecialCommands(session, Encoding.Default.GetString(outputMemory.ToArray()));// 對數據內容進行一些操作outputMemory.Span.Reverse();// 將數據寫回流await outputPipe.WriteAsync(outputMemory);memory.Span.Fill(0);} }static async Task ApplySpecialCommands(IWebTransportSession session, string message) {switch (message){case "Initiate Stream":var stream = await session.OpenUnidirectionalStreamAsync();if (stream is not null){await stream.Transport.Output.WriteAsync(new("Created a new stream from the client and sent this message then closing the stream."u8.ToArray()));}break;case "Abort":session.Abort(256 /*No error*/);break;default:break; // in all other cases the string is not a special command} }// Adapted from: https://github.com/wegylexy/webtransport // We will need to eventually merge this with existing Kestrel certificate generation // tracked in issue #41762 static X509Certificate2 GenerateManualCertificate() {X509Certificate2 cert;var store = new X509Store("KestrelSampleWebTransportCertificates", StoreLocation.CurrentUser);store.Open(OpenFlags.ReadWrite);if (store.Certificates.Count > 0){cert = store.Certificates[^1];// rotate key after it expiresif (DateTime.Parse(cert.GetExpirationDateString(), null) >= DateTimeOffset.UtcNow){store.Close();return cert;}}// generate a new certvar now = DateTimeOffset.UtcNow;SubjectAlternativeNameBuilder sanBuilder = new();sanBuilder.AddDnsName("localhost");using var ec = ECDsa.Create(ECCurve.NamedCurves.nistP256);CertificateRequest req = new("CN=localhost", ec, HashAlgorithmName.SHA256);// Adds purposereq.CertificateExtensions.Add(new X509EnhancedKeyUsageExtension(new OidCollection{new("1.3.6.1.5.5.7.3.1") // serverAuth}, false));// Adds usagereq.CertificateExtensions.Add(new X509KeyUsageExtension(X509KeyUsageFlags.DigitalSignature, false));// Adds subject alternate namesreq.CertificateExtensions.Add(sanBuilder.Build());// Signusing var crt = req.CreateSelfSigned(now, now.AddDays(14)); // 14 days is the max duration of a certificate for thiscert = new(crt.Export(X509ContentType.Pfx));// Savestore.Add(cert);store.Close();return cert; }

2.客戶端

<!DOCTYPE html> <html> <head><meta charset="utf-8" /><title>WebTransport Test Page</title> </head> <body><script src="certificate.js"></script><div id="panel"><h1 id="title">WebTransport Test Page</h1><h3 id="stateLabel">Ready to connect...</h3><div><label for="connectionUrl">WebTransport Server URL:</label><input id="connectionUrl" value="https://127.0.0.1:5552" disabled /><p>Due to the need to synchronize certificates, you cannot modify the url at this time.</p><button id="connectButton" type="submit" onclick="connect()">Connect</button></div><div id="communicationPanel" hidden><div><button id="closeStream" type="submit" onclick="closeActiveStream()">Close active stream</button><button id="closeConnection" type="submit" onclick="closeConnection()">Close connection</button><button id="createBidirectionalStream" type="submit" onclick="createStream('bidirectional')">Create bidirectional stream</button><button id="createUnidirectionalStream" type="submit" onclick="createStream('output unidirectional')">Create unidirectional stream</button></div><h2>Open Streams</h2><div id="streamsList"><p id="noStreams">Empty</p></div><div><h2>Send Message</h2><textarea id="messageInput" name="text" rows="12" cols="50"></textarea><button id="sendMessageButton" type="submit" onclick="sendMessage()">Send</button></div></div></div><div id="communicationLogPanel"><h2 style="text-align: center;">Communication Log</h2><table style="overflow: auto; max-height: 1000px;"><thead><tr><td>Timestamp</td><td>From</td><td>To</td><td>Data</td></tr></thead><tbody id="commsLog"></tbody></table></div><script>let connectionUrl = document.getElementById("connectionUrl");let messageInput = document.getElementById("messageInput");let stateLabel = document.getElementById("stateLabel");let commsLog = document.getElementById("commsLog");let streamsList = document.getElementById("streamsList");let communicationPanel = document.getElementById("communicationPanel");let noStreamsText = document.getElementById("noStreams");let session;let connected = false;let openStreams = [];async function connect() {if (connected) {alert("Already connected!");return;}communicationPanel.hidden = true;stateLabel.innerHTML = "Ready to connect...";session = new WebTransport(connectionUrl.value, {serverCertificateHashes: [{algorithm: "sha-256",value: Uint8Array.from(atob(CERTIFICATE), c => c.charCodeAt(0))}]});stateLabel.innerHTML = "Connecting...";await session.ready;startListeningForIncomingStreams();setConnection(true);}async function closeConnection() {if (!connected) {alert("Not connected!");return;}for (let i = 0; i < openStreams.length; i++) {await closeStream(i);}await session.close();setConnection(false);openStreams = [];updateOpenStreamsList();}function setConnection(state) {connected = state;communicationPanel.hidden = !state;let msg = state ? "Connected!" : "Disconnected!";stateLabel.innerHTML = msg;addToCommsLog("Client", "Server", msg);}function updateOpenStreamsList() {streamsList.innerHTML = "";for (let i = 0; i < openStreams.length; i++) {streamsList.innerHTML += '<div>' +`<input type="radio" name = "streams" value = "${i}" id = "${i}" >` +`<label for="${i}">${i} - ${openStreams[i].type}</label>` +'</div >';}noStreamsText.hidden = openStreams.length > 0;}async function closeActiveStream() {let streamIndex = getActiveStreamIndex();await closeStream(streamIndex);}async function closeStream(index) {let stream = openStreams[index].stream;if (!stream) {return;}// close the writable part of a stream if it existsif (stream.writable) {await stream.writable.close();}// close the readable part of a stream if it existsif (stream.cancelReaderAndClose) {await stream.cancelReaderAndClose();}// close the stream if it can be closed manuallyif (stream.close) {await stream.close();}// remove from the list of open streamsopenStreams.splice(index, 1);updateOpenStreamsList();}async function startListeningForIncomingStreams() {try {let streamReader = session.incomingUnidirectionalStreams.getReader();let stream = await streamReader.read();if (stream.value && confirm("New incoming stream. Would you like to accept it?")) {startListeningForIncomingData(stream.value, openStreams.length, "input unidirectional");// we don't add to the stream list here as the only stream type that we can receive is// input. As we can't send data over these streams, there is no point in showing them to the user}} catch {alert("Failed to accept incoming stream");}}async function startListeningForIncomingData(stream, streamId, type) {let reader = isBidirectional(type) ? stream.readable.getReader() : stream.getReader();// define a function that we can use to abort the reading on this streamvar closed = false;stream.cancelReaderAndClose = () => {console.log(reader);reader.cancel();reader.releaseLock();closed = true;}// read loop for the streamtry {while (true) {let data = await reader.read();let msgOut = "";data.value.forEach(x => msgOut += String.fromCharCode(x));addToCommsLog("Server", "Client", `RECEIVED FROM STREAM ${streamId}: ${msgOut}`);}} catch {alert(`Stream ${streamId} ${closed ? "was closed" : "failed to read"}. Ending reading from it.`);}}async function createStream(type) {if (!connected) {return;}let stream;switch (type) {case 'output unidirectional':stream = await session.createUnidirectionalStream();break;case 'bidirectional':stream = await session.createBidirectionalStream();startListeningForIncomingData(stream, openStreams.length, "bidirectional");break;default:alert("Unknown stream type");return;}addStream(stream, type);}function addStream(stream, type) {openStreams.push({ stream: stream, type: type });updateOpenStreamsList();addToCommsLog("Client", "Server", `CREATING ${type} STREAM WITH ID ${openStreams.length}`);}async function sendMessage() {if (!connected) {return;}let activeStreamIndex = getActiveStreamIndex();if (activeStreamIndex == -1) {alert((openStreams.length > 0) ? "Please select a stream first" : "Please create a stream first");}let activeStreamObj = openStreams[activeStreamIndex];let activeStream = activeStreamObj.stream;let activeStreamType = activeStreamObj.type;let writer = isBidirectional(activeStreamType) ? activeStream.writable.getWriter() : activeStream.getWriter();let msg = messageInput.value.split("").map(x => (x).charCodeAt(0));await writer.write(new Uint8Array(msg));writer.releaseLock();addToCommsLog("Client", "Server", `SENDING OVER STREAM ${activeStreamIndex}: ${messageInput.value}`);}function isBidirectional(type) {return type === "bidirectional";}function getActiveStream() {let index = getActiveStreamIndex();return (index === -1) ? null : openStreams[index].stream;}function getActiveStreamIndex() {let allStreams = document.getElementsByName("streams");for (let i = 0; i < allStreams.length; i++) {if (allStreams[i].checked) {return i;}}return -1;}function addToCommsLog(from, to, data) {commsLog.innerHTML += '<tr>' +`<td>${getTimestamp()}</td>` +`<td>${from}</td>` +`<td>${to}</td>` +`<td>${data}</td>`'</tr>';}function getTimestamp() {let now = new Date();return `${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}.${now.getMilliseconds()}`;}</script> </body> </html> <style>html,body {background-color: #459eda;padding: 0;margin: 0;height: 100%;}body {display: flex;flex-direction: row;}#panel {background-color: white;padding: 12px;margin: 0;border-top-right-radius: 12px;border-bottom-right-radius: 12px;border-right: #0d6cad 5px solid;max-width: 400px;min-width: 200px;flex: 1;min-height: 1200px;overflow: auto;}#panel > * {text-align: center;}#communicationLogPanel {padding: 24px;flex: 1;}#communicationLogPanel > * {color: white;width: 100%;}#connectButton {background-color: #2e64a7;}#messageInput {max-width: 100%;}#streamsList {max-height: 400px;overflow: auto;}input {padding: 6px;margin-bottom: 8px;margin-right: 0;}button {background-color: #459eda;border-radius: 5px;border: 0;text-align: center;color: white;padding: 8px;margin: 4px;width: 100%;} </style>

3.效果

總結

以上是生活随笔為你收集整理的【愚公系列】2022年11月 .NET CORE工具案例-.NET 7中的WebTransport通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧美午夜寂寞影院 | 久久免费的精品国产v∧ | www.在线观看视频 | 精品视频免费观看 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 国产一区电影在线观看 | 久久视频一区二区 | 成人精品一区二区三区中文字幕 | 国产午夜三级一区二区三 | www国产亚洲 | 国产精品一区二区av麻豆 | 精品一区免费 | 91丨九色丨蝌蚪丨老版 | 久久久久久视频 | 黄色三级免费 | 久久久美女 | 一区二区电影网 | 综合色天天 | 精品一区免费 | 欧美亚洲精品一区 | 亚洲成人黄色在线观看 | 久青草电影 | 狠狠色婷婷丁香六月 | 美女视频一区 | av免费观看网址 | 成年人电影免费看 | 国产一区二区中文字幕 | 亚洲美女视频在线观看 | 久草视频一区 | 午夜精品视频一区 | 可以免费观看的av片 | 青青河边草观看完整版高清 | av高清不卡 | 毛片网站在线看 | 在线观看你懂的网址 | 欧美9999 | 精品国内自产拍在线观看视频 | 日韩精品一区二区三区三炮视频 | www.久热| 99久久精品国产亚洲 | 国产原创中文在线 | 超碰97在线资源 | 成年人黄色在线观看 | 五月花丁香婷婷 | 天天天天爱天天躁 | 成人app在线免费观看 | 国外av在线 | 国产精品福利久久久 | 天天干天天干天天操 | 黄色91免费观看 | 美女网站视频免费都是黄 | 亚洲综合视频网 | 亚洲综合在线视频 | 色欧美88888久久久久久影院 | 97视频免费在线观看 | 超碰人人干人人 | 国产精品人成电影在线观看 | 亚洲精品色 | 国产成人777777 | 在线看片视频 | 99久久99久国产黄毛片 | 91视频这里只有精品 | 亚洲日日日| 深夜免费小视频 | 狠狠干.com| 涩av在线 | 一区二区三区在线观看免费视频 | 99在线热播精品免费 | 三级黄色欧美 | 欧亚日韩精品一区二区在线 | 波多野结衣电影一区二区 | 最近日本韩国中文字幕 | 久久综合久久综合这里只有精品 | 国产福利a | 最新av电影网址 | 中文字幕av免费 | 天天操夜夜拍 | 久久久免费观看视频 | www黄| 精品国产欧美一区二区三区不卡 | 国产精品女视频 | 夜夜躁日日躁狠狠躁 | 日韩欧美视频一区 | 黄色网www | 欧美久久久久久久久 | 色欲综合视频天天天 | 日韩在线视频网站 | 国产一区视频在线观看免费 | av性网站| 亚洲精品福利视频 | 国产女做a爱免费视频 | 亚洲国产精品电影在线观看 | 我要色综合天天 | 一级做a爱片性色毛片www | 中文字幕一区二区三区视频 | 亚洲国产美女久久久久 | 国产精品成人一区二区三区吃奶 | 激情丁香综合五月 | 亚洲国产午夜精品 | 国产视频精品视频 | 久久精品视频3 | 国产免费资源 | 91av美女| 亚洲精品免费在线观看视频 | 久久精品综合视频 | 91亚洲精品久久久中文字幕 | 久久黄色影视 | 91av视频导航| 欧美另类调教 | 99视频在线免费 | 天天鲁一鲁摸一摸爽一爽 | 四虎海外影库www4hu | 美女国产 | 欧美成人性网 | 亚洲欧美视频在线观看 | 日韩免费在线网站 | 五月天亚洲综合小说网 | 96在线 | 色av婷婷 | 国产精品综合av一区二区国产馆 | 麻豆一二三精选视频 | 日韩高清国产精品 | 最新久久免费视频 | 国产999在线 | 91桃花视频| 精品久久国产 | 色婷婷激婷婷情综天天 | 久久久精品综合 | 国产成人精品av在线 | 国产精品黄色av | 91丨九色丨91啦蝌蚪老版 | 免费av看片 | 国产五月婷 | 日韩乱码中文字幕 | 午夜成人影视 | 亚洲成av人片在线观看 | 日韩va亚洲va欧美va久久 | 久久艹综合 | 四虎在线免费 | 夜夜澡人模人人添人人看 | 成人免费看视频 | 精品久久中文 | 日批在线看 | 日韩性色| 亚洲国产精品视频在线观看 | 亚洲综合视频在线播放 | 国产美女被啪进深处喷白浆视频 | 女人高潮特级毛片 | 天天色天天艹 | 在线国产一区二区 | 91热视频在线观看 | 亚洲精品在线国产 | 国产中文字幕网 | av中文天堂 | 在线色亚洲 | 中文字幕在线观看完整版电影 | 69久久夜色精品国产69 | 九九免费精品视频 | 日日麻批40分钟视频免费观看 | 国产精品人成电影在线观看 | 国产成人一区二区三区 | 欧美 国产 视频 | 日韩亚洲国产中文字幕 | 97香蕉超级碰碰久久免费软件 | 久久草草影视免费网 | 在线播放第一页 | 视频精品一区二区三区 | 99在线视频免费观看 | 天天操天天干天天综合网 | 98精品国产自产在线观看 | 久久99精品久久久久蜜臀 | 日日夜夜亚洲 | 少妇bbbb搡bbbb搡bbbb | 国内精品亚洲 | 色妞色视频一区二区三区四区 | 亚洲精品大全 | 亚洲一区二区三区在线看 | 国产黄色免费 | 日韩视频在线一区 | 色综合久久88色综合天天6 | 99在线高清视频在线播放 | 久久九九国产精品 | 国产乱对白刺激视频不卡 | 免费av网站在线 | 婷婷丁香七月 | 99国产精品视频免费观看一公开 | 天天干中文字幕 | 操操操日日日干干干 | 亚洲精品777 | 美女国产在线 | 日韩剧| 日本成人黄色片 | 伊人久久五月天 | 四虎永久免费在线观看 | 成年人免费看av | 在线最新av | 精品综合久久 | 精品免费| 亚洲视频免费在线看 | 激情偷乱人伦小说视频在线观看 | 视频国产一区二区三区 | 欧美久久久久久久久久久久 | 国产剧情久久 | 草久在线观看 | 手机看片99 | 国产精品久久久久久久久久不蜜月 | 欧美久久久久 | 成人在线免费观看网站 | 97在线观看免费视频 | 精品国产伦一区二区三区免费 | 免费观看国产成人 | 欧美国产日韩久久 | 国产露脸91国语对白 | 91精品老司机久久一区啪 | 444av| 日日干天天爽 | www.日本色 | 久草视频在线播放 | 丁香久久激情 | 国产精品国产三级国产专区53 | 欧美午夜视频在线 | 亚洲综合视频网 | 五月婷婷网站 | 青草视频在线看 | 成人av视屏| 91色吧 | 不卡av免费在线观看 | 最近日本中文字幕a | 综合色爱| 久久国产香蕉视频 | 天堂av免费观看 | 欧美综合国产 | 精品国产一区二区三区男人吃奶 | 国产69精品久久久久9999apgf | 欧美日韩一区久久 | av大全在线观看 | 狠狠狠狠狠狠 | 国产一级精品绿帽视频 | 中国一级片在线 | 久久精品精品 | 国产九九九九九 | 91精品久久久久久久久久入口 | 国产精品日韩高清 | 天海翼一区二区三区免费 | 精品国产亚洲一区二区麻豆 | 福利一区二区在线 | 久久9999久久免费精品国产 | 天天操比 | 九九在线高清精品视频 | 婷婷久久一区二区三区 | 黄色一级大片在线免费看产 | 日韩欧美综合在线视频 | av在线最新 | 在线成人免费 | 国产在线更新 | 日韩网站一区 | 日韩成人精品 | 天天草天天干天天射 | 久久国产露脸精品国产 | 免费看毛片在线 | 欧美一级专区免费大片 | 中文字幕一区二区三 | 国产免费一区二区三区网站免费 | 最新av在线播放 | 久久综合九色欧美综合狠狠 | 国产美女主播精品一区二区三区 | 亚洲a色| 久久精品99视频 | 久久久久久久久久久久久久免费看 | 人人看看人人 | 97色se| 91福利社区在线观看 | 欧美日韩在线观看一区二区三区 | 夜夜看av | 成人免费看视频 | 久久国产精品小视频 | 91精品在线免费观看 | 欧美另类高清 | 国产精品久久久久久久久久久杏吧 | 亚洲性少妇性猛交wwww乱大交 | 成人国产精品久久久久久亚洲 | 久久免费99精品久久久久久 | 国产精品久久久久久久7电影 | 免费观看91视频大全 | 九九九九九九精品任你躁 | 狠狠的干狠狠的操 | 国产乱对白刺激视频在线观看女王 | 一区二区三区在线看 | 久久香蕉一区 | 国产精品大片免费观看 | 色国产精品| 久久国产精品二国产精品中国洋人 | 91成人免费看片 | 国产成人一级 | 一本一道波多野毛片中文在线 | 午夜国产福利视频 | 99久久99久久| 91精品一区二区三区久久久久久 | 国产精品高潮呻吟久久av无 | 亚洲一级免费电影 | 丁香六月欧美 | 在线观看视频一区二区 | 国产中文字幕在线 | 国产生活一级片 | 深爱五月激情五月 | 99精品视频免费看 | 超级碰碰碰视频 | 久久精品欧美视频 | 亚洲国产精品激情在线观看 | 九九九九九九精品任你躁 | 日韩在线影视 | 国产精品一区二区中文字幕 | 成人中文字幕在线 | 综合久久久久久 | 久久久综合精品 | 午夜精品久久久久久久99 | 毛片激情永久免费 | 欧美激情片在线观看 | 精品9999| 欧美一级久久 | 午夜精品福利在线 | 国产91学生粉嫩喷水 | 丁香婷婷社区 | 成人h在线播放 | 亚洲精品视频偷拍 | 500部大龄熟乱视频使用方法 | 亚洲精品在线二区 | 69亚洲视频| 国产粉嫩在线 | 精品久久久久久久 | 日本三级在线观看中文字 | 色婷婷www | 欧美 日韩 视频 | 亚洲精品免费在线视频 | 国产麻豆精品一区二区 | 伊人va | 久久精品一区二区三区国产主播 | 成人a在线观看高清电影 | 国产精品久久久久久69 | 久久久久在线 | 在线免费高清 | 欧美日韩国产一二三区 | 91av在线视频播放 | 欧美伦理电影一区二区 | 97人人爽人人| 韩日色视频 | 天天草综合 | 99免费视频 | 免费在线观看av的网站 | 美女一级毛片视频 | 日日操日日干 | 97视频网站| 91在线视频在线 | 久久999久久| 91免费视频网站在线观看 | 成人久久18免费 | 91高清免费观看 | 青草视频免费观看 | 亚洲精品自在在线观看 | 九七人人干 | 久草电影免费在线观看 | 超碰公开在线观看 | 尤物九九久久国产精品的分类 | av高清免费 | 在线不卡视频 | 欧美一级性 | 久久国产精品小视频 | 69精品久久 | 在线高清 | 国产精品久久久久av福利动漫 | 精品99在线 | 日韩免费在线视频 | 成人av一区二区兰花在线播放 | 国产免费叼嘿网站免费 | 久久国产精品精品国产色婷婷 | 国产99久久久欧美黑人 | 99re国产| 国产免费一区二区三区最新6 | 欧美激情综合五月色丁香小说 | 日韩欧美在线观看一区二区三区 | 久久九九视频 | 国产专区日韩专区 | aaa毛片视频 | 欧美亚洲成人xxx | 欧美成人999 | 久久这里只有精品视频首页 | 日本夜夜草视频网站 | 一区二区三区免费在线观看视频 | 久草在线免费电影 | 成人欧美一区二区三区黑人麻豆 | 色偷偷人人澡久久超碰69 | 日韩av看片 | 黄色.com| 精品一二三区视频 | 四虎影视精品 | 最近最新中文字幕视频 | 99精品国产视频 | 中文字幕在线观看资源 | 久久电影国产免费久久电影 | 麻豆一区在线观看 | 国产成人精品999 | 久久久久久网址 | 婷婷色视频 | 在线小视频 | 97在线成人 | 在线看黄色的网站 | 9999在线观看 | 国产.精品.日韩.另类.中文.在线.播放 | www蜜桃视频 | 亚洲午夜精| 欧美夫妻生活视频 | 999ZYZ玖玖资源站永久 | 婷婷色在线视频 | 国产美女免费视频 | 国产成人av电影在线 | 久久香蕉国产精品麻豆粉嫩av | 天天操天天摸天天射 | 亚洲国内精品视频 | 精品国产一区二区三区噜噜噜 | 日产乱码一二三区别免费 | 亚洲精品国产精品国自产在线 | 国产一区福利在线 | 99精品乱码国产在线观看 | 五月婷婷六月综合 | 麻花豆传媒mv在线观看网站 | 午夜在线免费视频 | 国产呻吟在线 | 久久综合九色欧美综合狠狠 | 日韩久久久久久久久久 | aav在线| 九九热精| 国产资源网 | 日韩免费大片 | 91精品一区国产高清在线gif | 五月天亚洲婷婷 | 国产成人精品一区二区三区福利 | 人人插人人做 | 亚洲视频综合在线 | 一色屋精品视频在线观看 | aaa毛片视频 | 奇米影视四色8888 | 亚洲成人999 | 在线免费观看一区二区三区 | 免费日韩 精品中文字幕视频在线 | 日韩成年视频 | 制服丝袜亚洲 | 激情五月婷婷激情 | 玖玖色在线观看 | 久久99精品国产91久久来源 | 91激情视频在线观看 | 国产麻豆视频网站 | 久久精品久久久久 | 久久综合狠狠综合久久综合88 | 国产美女网站视频 | 狠狠操夜夜操 | 最近中文字幕 | 91av视频在线播放 | 欧美成年黄网站色视频 | 麻豆视频大全 | 麻豆视频在线看 | 欧美另类xxx | 91色亚洲 | 日批视频在线 | 久久精品一区二区三区国产主播 | a精品视频| 日日躁夜夜躁aaaaxxxx | 91久久在线观看 | 亚洲涩涩涩 | 国产精品一区二区美女视频免费看 | 伊人久久影视 | 色综合久久精品 | 亚洲激情在线 | 成人禁用看黄a在线 | av中文字幕在线播放 | 中文字幕永久 | 久久夜色精品国产欧美乱极品 | 成人毛片在线视频 | 久久五月网 | 久久乐九色婷婷综合色狠狠182 | 日本久久久精品视频 | 东方av免费在线观看 | 国产成人一级电影 | 天天干天天综合 | 成人免费视频播放 | 人人干天天射 | 91黄色小视频 | 伊色综合久久之综合久久 | 久久国产午夜精品理论片最新版本 | 国产毛片久久 | 911在线| 超碰在97 | 日韩有码中文字幕在线 | 婷婷在线色| 99久久久国产精品 | 成年人电影免费看 | 国产免费激情久久 | 在线91视频| 在线欧美国产 | 久草在线电影网 | 99久久精品免费看国产 | 91精品免费在线 | 久久精品免费观看 | 在线观看亚洲视频 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产成人精品一区二区三区在线观看 | 亚洲a资源| 天天干天天看 | av播放在线 | 日韩午夜av电影 | 亚洲免费在线观看视频 | 色多多污污 | 久久在线免费观看视频 | 福利视频一区二区 | 国产精品久久久久久久毛片 | 成人亚洲精品久久久久 | 亚洲视频在线免费观看 | 亚洲国内在线 | 久久精品久久99精品久久 | 在线天堂亚洲 | 国产成人黄色网址 | 久久精品99国产国产精 | www.狠狠插.com | 玖玖玖国产精品 | 久久久黄色免费网站 | 亚洲国产中文字幕在线视频综合 | av电影免费看 | 免费涩涩网站 | 国产小视频在线免费观看 | 日韩欧美一区二区三区视频 | 日日摸日日碰 | 亚洲精品免费看 | 午夜999| 国产精品久久久久一区二区 | 国产专区免费 | 国产精品成人aaaaa网站 | 少妇啪啪av入口 | 麻豆91精品 | 伊甸园永久入口www 99热 精品在线 | av大片免费看 | 国产伦理精品一区二区 | 国产精品久久久久久久久久久久久久 | 在线观看视频一区二区三区 | 国产视频日韩 | 国产精品麻豆91 | 日本h在线播放 | 日韩高清免费在线观看 | 五月天中文字幕mv在线 | 国产一级二级视频 | 久久9视频 | 久久精品99久久久久久2456 | 国产中文字幕一区二区 | 成人免费视频视频在线观看 免费 | 不卡国产视频 | 日韩欧美国产精品 | 欧美一级久久 | 久久精品国产成人 | 欧美二区在线播放 | 国产高清av免费在线观看 | www四虎影院 | 精品国产美女在线 | 欧美性色综合网站 | 超碰在线最新 | 超碰97在线资源站 | 啪啪小视频网站 | 日韩a在线观看 | 日韩高清成人在线 | 亚州免费视频 | 毛片久久久 | 日韩欧美在线免费观看 | 狠狠伊人 | 黄网站app在线观看免费视频 | 四虎国产精品成人免费4hu | 亚洲专区欧美 | 韩国av免费看 | 国产一区自拍视频 | 一区免费观看 | 成人a免费看 | 91视频网址入口 | 香蕉久久国产 | 五月婷婷av | 国产又粗又猛又色又黄视频 | av资源免费观看 | 天天干夜夜爽 | 久久久久欧美精品999 | 成人免费在线播放 | 久草色在线观看 | 亚洲国产视频网站 | 日韩精品欧美精品 | 欧洲色综合 | 九七在线视频 | 亚洲精品影院在线观看 | 久久国产精品区 | 欧美老女人xx | 午夜精品一区二区三区在线观看 | 国产成人777777 | 日韩欧美一区二区三区视频 | 99精彩视频在线观看免费 | 97理论电影 | 日本精品在线 | 亚洲理论片在线观看 | 永久黄网站色视频免费观看w | 久久一区国产 | 色偷偷网站视频 | 亚洲高清精品在线 | 射综合网 | 国产亚洲精品电影 | 国产特级毛片aaaaaa高清 | 亚洲 欧美 变态 国产 另类 | 亚在线播放中文视频 | 狠狠狠狠狠狠狠狠干 | 久久亚洲欧美日韩精品专区 | www.久久久.com| 日韩素人在线观看 | 亚州日韩中文字幕 | 最新日韩中文字幕 | 亚洲精品字幕在线观看 | 婷婷激情综合五月天 | 久久久久色 | 黄色特级一级片 | 日韩高清在线看 | 欧美一进一出抽搐大尺度视频 | 国产成人精品一区二区在线观看 | 91免费版在线观看 | 欧美另类美少妇69xxxx | 日本久久成人中文字幕电影 | 国产精品综合久久久久 | 69精品久久久 | 在线看小早川怜子av | 中文av在线免费观看 | 天天草天天色 | 手机在线中文字幕 | 国产精品久久久久久久婷婷 | 国产精品视频在线观看 | 欧美日韩在线视频观看 | 久久在视频 | 免费精品在线视频 | 最新黄色av网址 | 丰满少妇高潮在线观看 | 久久99国产综合精品免费 | 亚洲成人蜜桃 | 欧美精品黑人性xxxx | 伊人久久精品久久亚洲一区 | 99爱视频| 91看片在线免费观看 | 国产精品免费一区二区三区 | 久久婷婷精品 | 欧美一区二区三区在线视频观看 | 婷婷色在线资源 | 91福利视频网站 | 视频在线一区二区三区 | 热99在线| 成人福利在线播放 | 久久精品国产99国产 | 日本美女xx| 日本黄色大片免费 | 亚色视频在线观看 | 欧美一区日韩一区 | 国产日韩视频在线播放 | 九九免费观看全部免费视频 | 免费看片成年人 | 成人天堂网 | 国产视频18 | 色资源中文字幕 | 啪一啪在线 | 国产黄色一级片 | 久久久久亚洲精品 | 中文字幕国产一区二区 | 亚洲福利精品 | 丁香婷五月 | 国产欧美中文字幕 | 国产日韩精品一区二区 | 亚洲免费av片 | 国产一区二区网址 | 99久久婷婷国产综合精品 | 欧美色婷 | 日日夜夜草 | 久久天| 91精品视频在线看 | 欧美一区二区三区免费看 | 00av视频 | 亚洲精品资源在线观看 | 啪啪免费试看 | 日韩av在线高清 | 99精品国产成人一区二区 | 视频在线观看一区 | 天天综合网 天天综合色 | 99在线热播精品免费 | 中国美女一级看片 | 国产在线观看黄 | 色狠狠操| 免费高清在线观看成人 | 99精品国产99久久久久久福利 | 国产黄色片免费观看 | 国产第一页在线观看 | 亚洲精品小视频 | 亚洲成人网在线 | 五月激情视频 | 久久精品人人做人人综合老师 | 一区二区中文字幕在线 | 久草在线这里只有精品 | 久久综合综合久久综合 | 中文字幕视频播放 | 久久精品欧美一区二区三区麻豆 | 在线观看成人毛片 | 97精品欧美91久久久久久 | 最近2019中文免费高清视频观看www99 | 欧美日韩亚洲第一页 | 亚洲国产人午在线一二区 | 欧美精品久久久久久久亚洲调教 | 中文字幕成人在线观看 | 日本性高潮视频 | 五月综合色婷婷 | 欧美国产精品久久久久久免费 | av中文天堂| 日韩大片在线 | 精品免费一区二区三区 | 天天色播| 天天综合区 | 丁香在线视频 | 久草视频免费在线观看 | 日韩国产精品毛片 | 狠狠色狠狠色综合日日92 | 久久精品婷婷 | 最近中文字幕在线 | 最新国产精品亚洲 | 色视频在线看 | 亚洲高清视频一区二区三区 | 日韩激情视频在线 | 九九视频免费在线观看 | 亚洲经典视频在线观看 | 麻豆一二| 日韩a级免费视频 | 中文字幕色婷婷在线视频 | 91视频 - 88av| 狠狠色丁香婷婷综合基地 | 在线有码中文 | 久久婷婷色 | 亚洲国产精品视频在线观看 | 亚洲第二色 | 免费在线观看国产精品 | 色婷丁香 | 精品久久1 | 日本午夜免费福利视频 | 99视屏| 久久久久久久久久亚洲精品 | 超碰97在线看 | 国产免费中文字幕 | 欧美大码xxxx | 99在线精品视频在线观看 | 亚洲jizzjizz日本少妇 | 少妇搡bbbb搡bbb搡aa | 国产高清视频免费在线观看 | 国产黄a三级三级 | 久久午夜网 | 日韩av偷拍 | 国产精品久久久久免费观看 | 亚洲精品乱码久久久久久久久久 | 免费a视频在线观看 | 精品一区 在线 | 中文字幕视频免费观看 | 久久久综合精品 | 日韩在线第一区 | 婷婷在线资源 | 97久久精品午夜一区二区 | 日韩在线观看网站 | 成人av在线电影 | 日韩理论 | 久久99精品国产 | 美女av在线免费 | 天天色天天爱天天射综合 | 日韩动漫免费观看高清完整版在线观看 | 日韩av免费一区 | 国产亚洲精品久久久久久电影 | 亚洲涩涩一区 | 超碰在线官网 | 美女在线黄 | 欧美国产精品久久久久久免费 | 毛片久久久 | 五月婷婷中文网 | 久久久受www免费人成 | 在线视频你懂 | 国产特级毛片 | 中文字幕精品一区久久久久 | 国产精品原创av片国产免费 | 99久久影院 | 日韩一级电影在线 | 国产手机在线视频 | 蜜臀aⅴ国产精品久久久国产 | 青青草视频精品 | 欧美日韩高清国产 | 国产精品一区在线 | 黄色日视频 | 成人黄色在线电影 | 久久人网 | 久章草在线 | 在线观看久久 | 天天操月月操 | 亚洲精品视频大全 | 日韩精品久久久久 | 在线岛国av| 欧美激情综合五月色丁香小说 | 啪啪动态视频 | 99热这里只有精品1 av中文字幕日韩 | 天天曰天天干 | 精品亚洲成人 | 中文字幕一区二区三区久久蜜桃 | 91精品爽啪蜜夜国产在线播放 | 国产无限资源在线观看 | 亚洲日本欧美 | 国产精品系列在线 | 日日干网址 | 国产日产精品久久久久快鸭 | 97天天干| 黄色软件视频大全免费下载 | 国产日本亚洲高清 | 91黄色小网站 | 99热亚洲精品| 久综合网 | 国产成人精品av | 在线免费视频a | 日韩免费一级电影 | 高清国产午夜精品久久久久久 | 天天曰天天 | 日韩免费在线观看视频 | 国产一级免费播放 | 综合网久久| 久草91视频 | 欧美aa级 | 久久精品视频在线观看免费 | 天天操天天拍 | 丁香五月网久久综合 | 日本韩国欧美在线观看 | 久久人人97超碰国产公开结果 | 亚洲黄色片在线 | 国产成人av电影在线观看 | 日日干干| 亚洲国产欧美在线看片xxoo | 99这里只有| 国产一级免费观看 | 三级在线视频播放 | 五月婷婷六月丁香激情 | 久久黄色片 | 久久99久国产精品黄毛片入口 | 国产精品专区在线观看 | 香蕉日日 | 亚洲视频久久久 | 久久国产精品电影 | 色夜影院| 一本之道乱码区 | 国产黄色片免费观看 | 麻豆91网站 | 这里只有精品视频在线观看 | 精品一区二区免费视频 | 99亚洲精品 | 最近高清中文在线字幕在线观看 | 96国产在线 | 天天操天天射天天操 | 精品极品在线 | 久久夜靖品| 日韩最新av在线 | 国产一及片 | www.久久久com | 中文久久精品 | 深夜福利视频一区二区 | 亚洲精品在线观看的 | 91一区啪爱嗯打偷拍欧美 | 婷婷婷国产在线视频 | 日韩免费高清在线观看 | 奇米网444| 69国产成人综合久久精品欧美 | 久久深爱网 | 天天摸天天干天天操天天射 | 一级做a视频| 日本中文字幕在线 | 国产一级片久久 | 久久tv| 色综合久久综合网 | www.黄色片网站 | 国产色视频网站 | 伊甸园av在线 | 天天操天天操天天操天天操天天操 | 久久毛片网 | 成人国产精品久久久久久亚洲 | 欧美日韩国产一区二区在线观看 | 日韩欧美在线观看一区 | 香蕉视频国产在线 | 天天干夜夜爱 | 91精品秘密在线观看 | 久久精品国产一区二区 | 7777xxxx| 久草在线视频资源 | 99久久超碰中文字幕伊人 | 在线观看视频免费大全 | 成 人 黄 色 视频播放1 | 香蕉视频18 | 国产一级片在线播放 | 日日夜夜国产 | 精品专区一区二区 | 日韩激情视频在线观看 | 久久综合狠狠综合 | 黄色一级大片在线观看 | 久久久片 | 欧美亚洲国产一卡 | 日韩精品欧美一区 | 亚洲精品网址在线观看 | 国产精品麻豆三级一区视频 | 欧美日韩国产一区二区三区在线观看 | 高清不卡一区二区在线 | 一区二区三区在线观看免费视频 | av 一区二区三区四区 | 国产主播99| 中文字幕第 | 99精品国产免费久久久久久下载 | 人人干人人草 | 夜夜骑日日操 | 中文在线√天堂 | 可以免费看av | 成人午夜剧场在线观看 | 亚洲国产免费看 | 婷婷5月激情5月 | 99久久爱 | 国内精品国产三级国产aⅴ久 | 国产精品美女999 | 久草视频在线资源站 | 国产精品成人av久久 | 三上悠亚一区二区在线观看 | 久久久久久毛片精品免费不卡 | 美女搞黄国产视频网站 | 国产精品黄色影片导航在线观看 | 国产69精品久久久久9999apgf | 日本性xxxxx| 最新av免费在线观看 | 久久久久日本精品一区二区三区 | 99久久精品国产网站 | 97看片吧 | 欧美在线观看视频免费 | 在线观看视频你懂的 | 欧美一区二区三区四区夜夜大片 | 91av亚洲| 国内外激情视频 | 免费观看一区二区三区视频 | 91精品国产网站 | 97品白浆高清久久久久久 | 91成人免费在线 | 久草91视频| 成人一级在线观看 | 成人影片在线免费观看 | 国产精品乱码久久久 | 夜夜澡人模人人添人人看 | 亚洲精品国产综合久久 | 国产视频亚洲精品 | 国产精品久久在线观看 | 亚洲人成人99网站 | 91久久久久久久一区二区 | 国产打女人屁股调教97 | 一区二区三区日韩在线观看 | 女人魂免费观看 | av观看网站| 成人毛片一区 | 婷婷开心久久网 | 91九色视频网站 | 天天草天天干天天 | av中文字幕网站 | 国产精品中文在线 | 黄色成年片 | 高清av中文在线字幕观看1 | 日韩欧三级 | 亚洲欧洲中文日韩久久av乱码 | 久久久999免费视频 日韩网站在线 | 成人免费看黄 | 日日夜夜精品视频 | 国产精品午夜久久 | 亚洲国产精品久久久久 | 黄色一级大片在线免费看国产一 | 午夜成人免费电影 | 亚洲aⅴ久久精品 | 久久影视一区二区 | 欧美日韩国产一区 | 国产精品6 | 久久久久这里只有精品 | 色.www| 国产精品黄色影片导航在线观看 | 美女福利视频一区二区 | 日韩高清精品一区二区 | 69久久久久久久 | 精品免费久久久久 | 色婷婷欧美 | 精品国产一区二区三区久久久蜜月 | 揉bbb玩bbb少妇bbb | 6080yy精品一区二区三区 | 最近更新好看的中文字幕 | 久久精品久久久久久久 | 日韩免费一级a毛片在线播放一级 | 欧美99热| 亚洲一二三区精品 | 久久婷婷色 | 精品久久久久一区二区国产 | 国产精品99蜜臀久久不卡二区 |