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

C#網絡編程系列六:UDP編程

開發 后端
前一個專題簡單介紹了TCP編程的一些知識,UDP與TCP地位相當的另一個傳輸層協議,它也是當下流行的很多主流網絡應用(例如QQ、MSN和Skype等一些即時通信軟件傳輸層都是應用UDP協議的)

引用:前一個專題簡單介紹了TCP編程的一些知識,UDP與TCP地位相當的另一個傳輸層協議,它也是當下流行的很多主流網絡應用(例如QQ、MSN和Skype等一些即時通信軟件傳輸層都是應用UDP協議的)底層的傳輸基礎,所以在本專題中就簡單介紹下UDP的工作原理和UDP編程的只是,希望可以對剛接觸網絡編程的朋友起到入門的作用。

一、UDP介紹

UDP和TCP都是構建在IP層之上傳輸層的協議,但UDP是一種簡單、面向數據報(Sock_Dgram)的無連接協議,提供的是不一定可靠的傳輸服務。

然而TCP是一種面向連接、可靠的,面向字節流(Sock_Stream)的傳輸協議,對于“無連接”是指在正式通信前不必與對方先建立連接,不管對方狀態如何都可以直接發送過去(就如QQ中通過QQ號查看好友后發送添加好友請求,此間不需要考慮對方的狀態如何,都照樣發送請求)。從UDP和TCP的定義中就可以看出它們兩者的區別了,(1)UDP的可靠性不如TCP,因為TCP傳輸前要首先建立連接,這樣就增加了TCP傳輸的可靠性,所以UDP也被稱為不可靠的傳輸協議,關于TCP的介紹可以看我上一篇博客的介紹。

TCP和UDP還有另外一個區別。(2)UDP不能保證有序傳輸。即UDP不能確保數據的發送和接收順序。

下面就來看看UDP協議的工作原理,對UDP的工作原理有一個好的理解,對后面介紹的UDP編程也是一個好的基礎。

1.1 UDP的工作原理

UDP將網絡數據流量壓縮成數據報的形式,每一個數據報用8個字節(8 X 8位=64位)描述報頭信息,剩余字節包含具體的傳輸數據。UDP報頭(只有8個字節)相當于TCP的報頭(至少20個字節)很短,UDP報頭由4個域組成,每個域各占2個字節,具體為源端口、目的端口、用戶數據報長度和校驗和,

具體結構見下圖(下面也貼出了TCP報文的結構圖,與UDP數據報做一個對比的作用):

UDP協議和TCP協議都使用端口號為不同的應用保留其各自的數據傳輸通道這一機制,數據發送方將UDP數據報通過源端口發送出去,而數據接收方則通過目標端口接收數據。

1.2 UDP的優勢

前面介紹中說UDP相對于TCP是不可靠的,不能保證有序傳輸的傳輸協議,然而UDP協議相對于TCP協議的優勢在哪里呢?,

UDP相對于TCP的優勢主要有三個方面的:

(1)UDP速度比TCP快。

由于UDP不需要先與對方建立連接,也不需要傳輸確認,因此其數據的傳輸速度比TCP快很多。對于一些著重傳輸性能而不是傳輸完整性的應用(網絡音頻播放、視頻點播和網絡會議等),使用UDP協議更加適合,因為它傳輸速度快,使通過網絡播放的視頻音質好、畫面清晰。

(2)UDP有消息邊界。

通過UDP協議進行傳輸的發送方對應用程序交下來的報文,在添加首部后就向下直接交付給IP層。既不拆分也不合并,而是保留這些報文的邊界,所以使用UDP協議不需要像TCP那樣考慮消息邊界的問題,這樣就使得UDP編程相對于TCP在接收到的數據處理方面要簡單的多。(對于TCP消息邊界的問題可以查看相關的文檔,在這里我就不列出來了)

(3)UDP可以一對多傳輸

由于傳輸數據部建立連接,也就不需要維護連接狀態,因此一臺服務器可以同時向多個客戶端發送相同的信息。利用UDP可以使用廣播或者組播的方式同時向子網的所有客戶端進程發送信息,廣播和組播的介紹放到后面TCP編程中介紹。

上面介紹了UDP協議相對于TCP協議的優勢,其中速度快是UDP的最重要的優勢,也是像一些網絡會議、即時通信軟件傳輸層選擇UDP協議進行傳輸的原因所在。

二、.net平臺對UDP編程的支持

介紹完UDP相對于TCP的優勢后,當然很希望在.net平臺下開發一個基于UDP協議的一個應用了,然后.net平臺下對UDP編程也做了很好的支持,為我們開發基于UDP協議的網絡應用提供很多方便之處,下面就簡單介紹.net平臺下對UDP編程的支持(主要介紹提供的類來對UDP協議進行編程)。

.net類庫中的UdpClient類對基礎的Socket進行了封裝,這樣就在發送和接受數據時不需要考慮底層套接字的收發時處理的一些細節問題,這樣為UDP編程提供了方便,也可以提高開發效率(感覺net就是做這樣的事情的,對一些底層的實現進行封裝,方便我們的調用,這也體現了面向對象語言的封裝特性)對于這個的具體的使用我就不做過多的介紹的,在后面的UDP編程的實現部分將會對該類中主要方法的使用,大家可以查看MSDN來查看該類中其他成員的使用: http://msdn.microsoft.com/zh-cn/library/System.Net.Sockets.UdpClient.aspx

三、UDP編程的具體實現

由于UDP進程在通信之前是不需要建立連接,消息接收方可能并不知道是誰給它發的消息,因此UDP編程分為兩種模式:一種“實名發送”,即接收方可以由收到的消息得知發送方進程端口,另外一種則為“匿名發送”,即接收方并不知道發給它信息的遠程進程究竟來自哪個端口。下面通過一個winform 程序來演示下UDP的編程:

實現代碼:

  1. using System;  
  2. using System.Net;  
  3. using System.Net.Sockets;  
  4. using System.Text;  
  5. using System.Threading;  
  6. using System.Windows.Forms;  
  7. namespace UDPClient  
  8. {  
  9.     public partial class frmUdp : Form  
  10.     {  
  11.         private UdpClient sendUdpClient;  
  12.         private UdpClient receiveUpdClient;  
  13.         public frmUdp()  
  14.         {  
  15.             InitializeComponent();  
  16.             IPAddress[] ips = Dns.GetHostAddresses("");  
  17.             tbxlocalip.Text = ips[3].ToString();  
  18.             int port = 51883;  
  19.             tbxlocalPort.Text = port.ToString();  
  20.             tbxSendtoIp.Text = ips[3].ToString();  
  21.             tbxSendtoport.Text = port.ToString();  
  22.         }  
  23.  
  24.         // 接受消息  
  25.         private void btnReceive_Click(object sender, EventArgs e)  
  26.         {  
  27.             // 創建接收套接字  
  28.             IPAddress localIp = IPAddress.Parse(tbxlocalip.Text);  
  29.             IPEndPoint localIpEndPoint = new IPEndPoint(localIp, int.Parse(tbxlocalPort.Text));  
  30.             receiveUpdClient = new UdpClient(localIpEndPoint);  
  31.  
  32.  
  33.             Thread receiveThread = new Thread(ReceiveMessage);  
  34.             receiveThread.Start();  
  35.         }  
  36.  
  37.         // 接收消息方法  
  38.         private void ReceiveMessage()  
  39.         {  
  40.             IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);  
  41.             while (true)  
  42.             {  
  43.                 try 
  44.                 {  
  45.                     // 關閉receiveUdpClient時此時會產生異常  
  46.                     byte[] receiveBytes = receiveUpdClient.Receive(ref remoteIpEndPoint);  
  47.  
  48.                     string message = Encoding.Unicode.GetString(receiveBytes);  
  49.  
  50.                     // 顯示消息內容  
  51.                     ShowMessageforView(lstbxMessageView, string.Format("{0}[{1}]", remoteIpEndPoint, message));  
  52.                 }  
  53.                 catch 
  54.                 {  
  55.                     break;  
  56.                 }  
  57.             }  
  58.         }  
  59.  
  60.         // 利用委托回調機制實現界面上消息內容顯示  
  61.         delegate void ShowMessageforViewCallBack(ListBox listbox, string text);  
  62.         private void ShowMessageforView(ListBox listbox, string text)  
  63.         {  
  64.             if (listbox.InvokeRequired)  
  65.             {  
  66.                 ShowMessageforViewCallBack showMessageforViewCallback = ShowMessageforView;  
  67.                 listbox.Invoke(showMessageforViewCallback, new object[] { listbox, text });  
  68.             }  
  69.             else 
  70.             {  
  71.                 lstbxMessageView.Items.Add(text);  
  72.                 lstbxMessageView.SelectedIndex = lstbxMessageView.Items.Count - 1;  
  73.                 lstbxMessageView.ClearSelected();  
  74.             }  
  75.         }  
  76.         private void btnSend_Click(object sender, EventArgs e)  
  77.         {  
  78.             if (tbxMessageSend.Text == string.Empty)  
  79.             {  
  80.                 MessageBox.Show("發送內容不能為空","提示");  
  81.                 return;  
  82.             }  
  83.  
  84.             // 選擇發送模式  
  85.             if (chkbxAnonymous.Checked == true)  
  86.             {  
  87.                 // 匿名模式(套接字綁定的端口由系統隨機分配)  
  88.                 sendUdpClient = new UdpClient(0);  
  89.             }  
  90.             else 
  91.             {  
  92.                 // 實名模式(套接字綁定到本地指定的端口)  
  93.                 IPAddress localIp = IPAddress.Parse(tbxlocalip.Text);  
  94.                 IPEndPoint localIpEndPoint = new IPEndPoint(localIp, int.Parse(tbxlocalPort.Text));  
  95.                 sendUdpClient = new UdpClient(localIpEndPoint);  
  96.             }  
  97.  
  98.             Thread sendThread = new Thread(SendMessage);  
  99.             sendThread.Start(tbxMessageSend.Text);  
  100.         }  
  101.  
  102.         // 發送消息方法  
  103.         private void SendMessage(object obj)  
  104.         {  
  105.             string message = (string)obj;  
  106.             byte[] sendbytes = Encoding.Unicode.GetBytes(message);  
  107.             IPAddress remoteIp = IPAddress.Parse(tbxSendtoIp.Text);  
  108.             IPEndPoint remoteIpEndPoint = new IPEndPoint(remoteIp, int.Parse(tbxSendtoport.Text));  
  109.             sendUdpClient.Send(sendbytes, sendbytes.Length, remoteIpEndPoint);  
  110.             
  111.             sendUdpClient.Close();  
  112.              
  113.             // 清空發送消息框  
  114.             ResetMessageText(tbxMessageSend);  
  115.         }  
  116.  
  117.         // 采用了回調機制  
  118.         // 使用委托實現跨線程界面的操作方式  
  119.         delegate void ResetMessageCallback(TextBox textbox);  
  120.         private void ResetMessageText(TextBox textbox)  
  121.         {  
  122.             // Control.InvokeRequired屬性代表  
  123.             // 如果控件的處理與調用線程在不同線程上創建的,則為true,否則為false  
  124.             if (textbox.InvokeRequired)  
  125.             {  
  126.                 ResetMessageCallback resetMessagecallback = ResetMessageText;  
  127.                 textbox.Invoke(resetMessagecallback, new object[] { textbox });  
  128.             }  
  129.             else 
  130.             {  
  131.                 textbox.Clear();  
  132.                 textbox.Focus();  
  133.             }  
  134.         }  
  135.  
  136.         // 停止接收  
  137.         private void btnStop_Click(object sender, EventArgs e)  
  138.         {  
  139.             receiveUpdClient.Close();  
  140.         }  
  141.  
  142.         // 清空接受消息框  
  143.         private void btnClear_Click(object sender, EventArgs e)  
  144.         {  
  145.             this.lstbxMessageView.Items.Clear();  
  146.         }  
  147.     }  

運行結果:

實名發送:

在本地運行本程序的三個進程(分別為A,B,C),把進程C做為接受進程,進程A和進程B都向進程C發信息,進程A和進程分別綁定端口號為11883和21883,發送到端口都為51883,配置界面如下:

首先不勾選“匿名”復選框,在進程C中點擊“接收”按鈕開啟接受線程,在A進程和B進程中發送消息框里分別輸入你好,我是1和你好,我是2 ,然后點擊發送按鈕,此時在進程中就可以看到進程A和進程B發來的消息,如下圖:

從圖中可以看出每條消息之前都顯示了消息的準確來源(包括消息進程鎖在的Ip地址和端口號)

匿名發送:

下面把“匿名”復選框勾上后,再按照前面的步驟將得到下面的結果:

從圖中結果可以看出此時列表中顯示的消息來源的進程端口號分別為49439和49440,而不是發送消息進程的真實端口(11883和21883)

這種UDP只能辨別消息源主機的Ip地址,而無法知道發消息的進程究竟是哪個端口稱為“匿名發送”。正如我們平時發手機短信一樣,如果我們把認識的名字和電話號碼預先存在通訊錄里,當一發來信息,接受方馬上就可以從來電顯示中看到是誰發來的(實名模式);但是如果是陌生人發來信息或者廣告等信息時,僅看來電顯示,根本不知道對方是誰(匿名模式),QQ發消息也是一樣的道理。

四、UDP廣播和組播

前面UDP的實現中發送數據使用的都是一對一(單播)的通信方式,即只將數據發送到某一個進程。前面提到UDP可以實現一對多的傳輸方式,即通過廣播和組播把數據發送給一組進程。下面就介紹下UDP廣播和組播的相關知識。

4.1 廣播和組播的基本概念

雖然利用TCP協議可以保證數據的可靠、有序的傳輸,但是TCP僅支持一對以的傳輸,而且傳輸時需要在發送端和每一個接受端之間建立單獨的數據通信通道,如果需要實現網絡會議、網絡視頻的點播等功能時要向大量主機發送相同的數據包,如果采用單播方式逐個節點傳輸的話,將會給發送方帶來網絡堵塞等問題,此時可以考慮實現UDP的多播方式——即廣播和組播來實現這樣的功能(一對多通信分為廣播和組播兩種形式)。

廣播是指同時向子網中的多臺計算機發送消息,并且所有子網中的計算機都可以接收到發送方發來的消息,每個廣播消息包含一個特殊的IP地址,這個IP的中子網內主機標志部分的二進制都為1,例如,子網掩碼為255.255.255.0,對于子網192.168.0,則這個IP地址為192.168.0.255.

然后廣播消息又分為本地廣播和全球廣播兩種類型, 本地廣播是指向子網中的所有計算機發送廣播消息,其他網絡不會受到本地廣播的影響。

IP地址分為兩部分——網絡標志部分和主機標志部分,這兩部分是靠子網掩碼來區分的,主機標記部分二進制全部為1的地址成為本地廣播地址。例如:

A類網絡192.168.0.0,使用子網掩碼255.255.0.0,則本地廣播地址為:

對于IPv4來說,全球廣播使用所有位全為1的IP地址,即255.255.255.255,這個廣播地址代表數據報的目的地是網絡上所有設備,但是由于路由器會自動過濾全球廣播,所以使用這個地址根本就沒有任何意義。

然后當接收者分布于多個不同的子網時,廣播將不再適用,此時可以通過組播的方式來實現,組播也叫多路廣播,組播是將信息從一臺計算機發送到本網或全網內指定的計算機上,即發送到那些加入了指定組播組的計算機上,每臺計算機都可以通過程序隨時加入某個組播組中,也可以隨時退出來, 就像我們開網了會議一樣,可以隨時加入會議室進行開會,會議結束和會議進行中都可以隨意的退出來。

4.2 加入和退出組播組

組播組又稱為多路廣播組,組播地址的范圍在224.0.0.0到239.255.255.255的D類IP地址(至于這個概念大家可以百度百科里面就查看)。任何發送到組播地址的消息都會被發送到組內所有成員設備上,組可以使永久的也可以是臨時,大多數我們使用的都是臨時的,僅在有成員的時候才存在。

使用組播時,注意生命周期(TTL,Time to live)的設,TTL值表示允許路由器轉發的最大次數,當達到這個最大值時,數據包就會被丟棄,TTL的默認值為1,設置為1時表明只能在子網中發送數據

加入組播組:UdpClient類提供了JoinMulticastGroup方法,用于將UdpClient加入到使用指定的IPAddress的組播組中,調用該方法后,基礎的Socket會自動向路由器發送數據包,用于請求成為組播組的成員,如果成為組播組成員,就可以接收該組播組的數據報。至于具體方法的時候會在后面實現UDP廣播程序中會用到,另外大家也可以查看MSDN,所以這里我就不再列出來了,只是指出這個方法的作用,讓大家知道有這么個方法來調用。

退出組播組:同樣利用UdpClient的DropMulticastGroup方法,可以退出組播組,調用該方法后,基礎Socket會自動向路由器發送數據包,用于請求從指定的組播組里退出,從組中回收UdpClient對象之后,將不再接受發送到該組播組的數據報。

五、總結

由于時間的關系,這篇文章就介紹到這里的,至于實現UDP廣播的程序放在后面一個專題里面的,前面也對廣播和組播的概念進行了簡單的介紹,相信大家也對廣播和組播有了個簡單的認識(廣播組和組播組說白了就是一個IP地址的集合,其實實現UDP廣播的程序和前面實現單播的程序差不多,只是前面綁定了一個IP地址當然也只能發送到一個IP地址了,也就是所謂的單播,多播和廣播就是發送的IP地址是一個組,當然也就實現了一對多的傳輸了)。UDP廣播程序的實現就放在下一個專題和大家分享的,因為我現在要去吃飯了,吃完飯再繼續和大家介紹,希望大家如果覺得有幫助的話,也可以推薦下,這給我繼續寫下去的動力,謝謝大家的支持。

原文鏈接:http://www.cnblogs.com/zhili/archive/2012/09/01/UDP_Multicast.html

【編輯推薦】

  1. C#網絡編程系列一:網絡協議簡介
  2. C#網絡編程系列二:HTTP協議詳解
  3. C#網絡編程系列三:自定義Web服務器
  4. C#網絡編程系列四:自定義Web瀏覽器
  5. C#網絡編程系列五:TCP編程
  6. C#網絡編程系列七:UDP編程補充
  7. C#網絡編程系列八:P2P編程
  8. C#網絡編程系列九:類似QQ的即時通信程序
  9. C#網絡編程系列十:實現簡單的郵件收發器
責任編輯:張偉 來源: Learning hard的博客
相關推薦

2012-09-25 11:28:38

C#網絡協議UDP

2012-09-24 15:13:50

C#網絡協議TCP

2012-09-24 14:03:58

C#網絡協議C

2012-09-25 13:47:43

C#網絡協議P2P

2012-09-24 14:09:31

C#網絡協議C

2024-03-04 18:49:59

反射C#開發

2009-08-21 14:03:04

C#網絡編程

2012-09-24 14:43:51

C#網絡協議C

2012-09-24 14:31:55

C#網絡協議C

2012-09-25 15:02:50

C#網絡協議

2012-09-25 14:06:28

C#網絡協議

2009-08-21 14:47:39

C#網絡編程

2009-08-21 17:19:36

C#網絡編程入門

2009-08-26 10:34:15

C#類型C#變量

2009-08-24 11:02:52

C#接口映射

2009-08-24 09:55:26

C#接口轉換

2021-10-12 17:47:22

C# TAP異步

2011-04-13 17:31:16

C#.NET

2009-08-25 17:13:57

C#串口編程

2009-08-14 16:08:34

讀寫BinaryC#編程實例
點贊
收藏

51CTO技術棧公眾號

久久久.www| 黄色三级视频在线| 欧美自拍偷拍一区二区| 国产美女一区| 日韩一区二区精品视频| 在线观看免费看片| 麻豆免费版在线观看| 日本一区二区三区久久久久久久久不| 91社区国产高清| 国产成人无码精品| 色婷婷亚洲mv天堂mv在影片| 日韩精品专区在线| 亚洲黄色a v| 日本无删减在线| 久久伊人中文字幕| 91亚洲精品丁香在线观看| 日韩三级视频在线| 天天做天天爱天天爽综合网| 亚洲第一黄色网| 色乱码一区二区三区在线| 欧美24videosex性欧美| 中文字幕乱码亚洲精品一区| 国产精品v欧美精品v日韩精品| 久久久久久无码精品大片| 欧美日韩福利| 视频在线观看一区二区| 好吊一区二区三区视频| 国产日韩在线观看视频| 91久久奴性调教| 99久久国产综合精品五月天喷水| 在线免费av电影| 91美女精品福利| 成人欧美视频在线| 国产裸体无遮挡| 日韩av电影天堂| 国产91对白在线播放| 美女福利视频在线观看| 99久久亚洲精品蜜臀| 亚洲欧美综合v| 欧产日产国产精品98| 日韩精品一区二区三区中文 | 四虎4545www精品视频| 亚洲在线成人精品| 色一情一乱一乱一区91| 久久精品视频免费看| 欧美国产精品专区| 欧美激情第一页在线观看| 人妻无码中文字幕| 成人三级在线视频| 春色成人在线视频| 国产suv精品一区二区69| 久久www免费人成看片高清| 国产精品电影观看| a片在线免费观看| 久久久xxx| 国产精品国产福利国产秒拍| 午夜影院免费在线观看| 久久久国产亚洲精品| 日韩av免费在线看| 无码视频一区二区三区| 久久精品主播| 国产精品久久91| 91高潮大合集爽到抽搐| 久久国产麻豆精品| 成人免费高清完整版在线观看| 7777久久亚洲中文字幕| 国模少妇一区二区三区| 91福利视频导航| 欧美特黄一级视频| 久久午夜免费电影| 日韩影院一区| 老司机精品影院| 亚洲综合色婷婷| av日韩一区二区三区| 成人免费观看在线观看| 色悠悠久久综合| 久久久国产欧美| 精品国产乱码一区二区三区 | 午夜国产不卡在线观看视频| 日日橹狠狠爱欧美超碰| 欧美色网在线| 欧美福利视频一区| 天天躁日日躁狠狠躁av| 欧美自拍一区| 色阁综合伊人av| 黄色片在线观看网站| 伊人影院久久| 国产精品成人国产乱一区| 国产欧美熟妇另类久久久| 成人一区二区三区视频| 欧洲亚洲一区二区| а√天堂资源地址在线下载| 五月婷婷综合激情| 一道本视频在线观看| 视频精品一区| 亚洲人成欧美中文字幕| 黄色a级片在线观看| 一级成人国产| 成人免费xxxxx在线观看| 天堂a中文在线| 国产精品国产三级国产专播品爱网| 久久国产精品免费观看| 成人日韩精品| 亚洲精品一区二区三区99| a资源在线观看| 亚洲国产电影| 国产一区二区在线播放| 天堂在线资源网| 日本一区二区在线不卡| 毛片在线播放视频| 一区在线不卡| 亚洲欧美日韩高清| 麻豆一区二区三区精品视频| 青青草精品视频| 精品国产乱码久久久久软件| 黄网站免费在线观看| 色哟哟在线观看一区二区三区| 在线成人免费av| 青草国产精品| 欧美又大粗又爽又黄大片视频| 国产色片在线观看| 国产免费成人在线视频| 国产91美女视频| 2020最新国产精品| 久久亚洲一区二区三区四区五区高| 中文字幕亚洲精品在线| 成人妖精视频yjsp地址| 女女同性女同一区二区三区按摩| 亚洲日本网址| 亚洲欧美在线一区| 欧美精品二区三区| 高清成人免费视频| 欧美三级午夜理伦三级老人| 黄色成人在线视频| 影音先锋日韩有码| 国产一级片av| 久久九九久久九九| 男女高潮又爽又黄又无遮挡| 久久av国产紧身裤| 久久久久中文字幕| 天堂网在线资源| 香港成人在线视频| 在线黄色免费网站| 亚洲国产精品第一区二区| 99re在线国产| 色屁屁www国产馆在线观看| 欧美一区二区三区日韩| 朝桐光av在线| 国产成人午夜精品5599| 成人av在线播放观看| 日韩有吗在线观看| 久久99精品久久久久久青青91| 99精品国产99久久久久久97| 亚洲欧美经典视频| 337p日本欧洲亚洲大胆张筱雨| 欧美久久成人| 国产日韩一区欧美| 国产va在线视频| 亚洲男女性事视频| 精品乱码一区内射人妻无码| 欧美激情一区二区| www.se五月| 一本一道久久a久久精品蜜桃 | 操欧美女人视频| 国语自产在线不卡| 欧美色视频免费| 欧美色倩网站大全免费| 午夜剧场免费在线观看| 国产成人综合在线播放| 丝袜人妻一区二区三区| 国产va免费精品观看精品视频 | 日韩有码在线播放| 国内老熟妇对白xxxxhd| 亚洲电影中文字幕在线观看| 欧美性xxxx图片| 日韩电影一区二区三区四区| 一卡二卡3卡四卡高清精品视频| 日韩一区中文| 久久久久久国产精品美女| 欧美69xxxxx| 欧美美女一区二区| 精品视频久久久久| 国产女人aaa级久久久级| 中文字幕av一区二区三区人妻少妇 | 亚洲区一区二区三区| 国产aa精品| 91国内在线视频| sese一区| 欧美不卡在线视频| 无码一区二区三区| 亚洲激情网站免费观看| 在线免费观看a级片| 久久精品免费看| 日本中文字幕网址| 日本欧美国产| 国产区日韩欧美| 日韩免费大片| 97成人精品视频在线观看| 午夜免费福利在线观看| 精品不卡在线视频| 在线观看中文字幕av| 亚洲成国产人片在线观看| 久久午夜精品视频| thepron国产精品| 五月天婷婷亚洲| 老**午夜毛片一区二区三区| 99er在线视频| 四季av一区二区凹凸精品| 极品日韩久久| 日本精品视频| 国产免费一区二区三区在线能观看| 国内在线视频| 久久夜色撩人精品| 国产一二在线观看| 亚洲爱爱爱爱爱| 97人妻精品一区二区三区动漫| 大伊人狠狠躁夜夜躁av一区| 国产少妇在线观看| 国产精品成人一区二区艾草 | 一卡二卡三卡日韩欧美| 国产精品www爽爽爽| 北条麻妃国产九九精品视频| 亚洲xxx在线观看| 三级在线观看一区二区 | 国产黄大片在线观看| 久久九九精品99国产精品| 精品视频一二区| 日韩成人激情视频| 亚洲国产999| 欧美一区二区精品在线| 在线观看日批视频| 欧美亚洲综合另类| chinese国产精品| 欧美日韩一区二区精品| 日韩成人免费观看| 香港成人在线视频| 国产网站在线看| 午夜精品视频一区| 日本特黄特色aaa大片免费| 亚洲激情中文1区| 日韩视频中文字幕在线观看| 亚洲欧美怡红院| 影音先锋男人看片资源| 亚洲国产经典视频| 中文字幕伦理片| 中文字幕精品一区| av资源在线免费观看| 中文字幕日本不卡| 日韩va亚洲va欧美va清高| 亚洲欧美日韩国产综合| 国产高潮国产高潮久久久91| 亚洲欧美一区二区三区孕妇| 天天综合天天做| 亚洲宅男天堂在线观看无病毒| 麻豆成人在线视频| 亚洲国产精品人人做人人爽| 欧美亚洲天堂网| 欧美性生交xxxxxdddd| 中文字幕亚洲乱码熟女1区2区| 色综合久久久久综合| 欧美一区二区三区不卡视频| 在线免费av一区| 国产乱人乱偷精品视频a人人澡| 91精品久久久久久蜜臀| 精品黑人一区二区三区在线观看 | 国产欧美欧洲| 精品中文字幕一区二区三区av| 日本一区免费看| 欧美jizz| 国产二区视频在线| 亚洲女同同性videoxma| 人人干人人干人人| 国产一区二区免费在线| 东京热av一区| 国产色产综合产在线视频| 91香蕉视频网| 亚洲国产精品精华液网站| 国产无遮挡呻吟娇喘视频| 欧美色图天堂网| 国产高清在线观看视频| 日韩成人在线观看| 亚洲成人影院麻豆| 久久久久久成人| 成人mm视频在线观看| 成人久久18免费网站漫画| 蜜桃成人av| 免费观看亚洲视频| 久久亚洲图片| 制服下的诱惑暮生| 国产亚洲自拍一区| 青青草手机视频在线观看| 欧美日韩在线看| 国产三级漂亮女教师| 亚洲免费高清视频| 日本一本在线免费福利| 国产精品va在线播放| 国产日韩三级| 国产精品h视频| 国产精品一区毛片| 日本一二三区在线| 国产调教视频一区| 亚洲天堂日韩av| 7777精品伊人久久久大香线蕉经典版下载 | 国模精品娜娜一二三区| 久久中文字幕av| jizzjizzxxxx| 国产超碰在线一区| 三级在线观看免费大全| 色综合视频在线观看| 亚洲国产综合一区| 中文字幕亚洲综合久久| segui88久久综合9999| 亚洲一区二区三区久久| 欧美伦理影院| av黄色在线网站| 成人午夜视频在线| 欧美色图亚洲视频| 欧美日韩一二区| 大片免费播放在线视频| 91高潮精品免费porn| 这里视频有精品| 在线观看日韩羞羞视频| 日韩激情一区二区| 三级黄色片网站| 亚洲国产cao| 亚洲精品一区二区三区区别 | 吉吉日韩欧美| 蜜桃传媒视频麻豆一区 | 亚洲人成影院在线观看| 在线视频欧美亚洲| 在线不卡国产精品| 欧美三区四区| 日韩福利视频| 丝袜美腿一区二区三区| 短视频在线观看| 日韩欧美在线观看| 你懂的网站在线| 久久久久久久国产| 久久porn| 日韩av资源在线| 久久久精品影视| 无码人妻精品一区二区三区不卡 | 99久久精品久久亚洲精品| 在线观看欧美精品| 国产黄色片在线播放| 国产精品91一区| 日韩av二区| 加勒比av中文字幕| 亚洲免费av网站| 亚洲精品无码久久久| 97国产suv精品一区二区62| 高潮久久久久久久久久久久久久| 免费视频爱爱太爽了| 91在线观看视频| 亚洲成熟少妇视频在线观看| 国产午夜精品全部视频在线播放| 亚洲四虎影院| 国产日韩视频在线播放| 国产一区啦啦啦在线观看| 欧美成人综合色| 欧美精品一区二区三区蜜桃| www.youjizz.com在线| 蜜桃av色综合| 久久69国产一区二区蜜臀| 欧美色图亚洲视频| 精品国产一区二区国模嫣然| 国产在线天堂www网在线观看| 久久久人人爽| 日本不卡免费在线视频| 国产又粗又硬又长又爽| 精品久久五月天| 欧美伦理91| 性欧美videosex高清少妇| 韩国v欧美v日本v亚洲v| 麻豆一区产品精品蜜桃的特点| 精品国产伦理网| 性欧美18~19sex高清播放| 日本欧美精品久久久| 激情综合网天天干| 日韩av综合在线| 亚洲一区二区久久| 欧美成人一级| 欧美日韩激情视频在线观看| 中文字幕免费在线观看视频一区| 国产chinasex对白videos麻豆| 国产做受69高潮| 色综合久久网| av不卡中文字幕| 色婷婷综合久久久久中文一区二区| 日本福利在线| 国产九色91| 久久精品国产99久久6| 精品无码久久久久久久| 在线亚洲午夜片av大片| 久久成人福利| 伊人影院综合在线| 激情av一区二区| 麻豆传媒在线免费| 麻豆av一区二区三区久久| 韩国精品免费视频|