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

利用NIO建立Socket服務器

開發 后端
Socket的Channel在Selector上注冊某一種動作,Selector通過select操作,監視所有在該Selector注冊過的Channel的對應的動作,如果監測到某一對應的動作,則返回selectedKeys,自己手動取到各個SelectionKey進行相應的處理。當然NIO不僅可以接受Socket的Channel,還有文件操作等其他IO操作。

傳統的Java 的IO,利用Socket建立服務器,接收客戶端連接,一般都是為每一個連接建立一個線程,如果連接數巨大,那么服務器開銷也將巨大。。NIO的原理,可以參照圖:

Socket的Channel在Selector上注冊某一種動作,Selector通過select操作,監視所有在該Selector注冊過的Channel的對應的動作,如果監測到某一對應的動作,則返回selectedKeys,自己手動取到各個SelectionKey進行相應的處理。當然NIO不僅可以接受Socket的Channel,還有文件操作等其他IO操作。

作業的要求:

使用socket編程實現一個簡單的文件服務器。客戶端程序實現put功能(將一個文件從本地傳到文件服務器)和get功能(從文件服務器取一遠程文件存為本地文件)。客戶端和文件服務器不在同一臺機器上。

put [-h hostname] [-p portname] local_filename remote_filename
get [-h hostname] [-p portname] remote_filename local_filename

服務器端不使用nio,直接使用io的socket代碼如下:

  1. import java.io.*; 
  2. import java.net.ServerSocket; 
  3. import java.net.Socket; 
  4.  
  5. public class ServerMain { 
  6.      
  7.     public static void main(String[] args) { 
  8.  
  9.         class SocketThread extends Thread{ 
  10.              
  11.             private Socket socket; 
  12.             private byte[] buf; 
  13.             private int len = 0
  14.             public SocketThread(Socket socket) {  
  15.                 this.socket = socket; 
  16.                 buf = new byte[1024]; 
  17.             } 
  18.  
  19.             @Override 
  20.             public void run() { 
  21.                 try {    
  22.                     DataInputStream dis = new DataInputStream(socket.getInputStream()); 
  23.                     DataOutputStream dos = new DataOutputStream(socket.getOutputStream());  
  24.                      
  25.                     //String command = dis.readUTF();  
  26.                     len = dis.read(buf); 
  27.                     String command = new String(buf,0,len); 
  28.                      
  29.                     System.out.println("command=="+command); 
  30.                      
  31.                     String[] temp =command.split(" "); 
  32.                     command = temp[0];  //命令  是put還是get 
  33.                     String filename = temp[1];  //文件名 
  34.                      
  35.                     File file = new File("C:\\",filename);//假設放在C盤 
  36.                     if(command.equals("get")){ 
  37.                         if(!file.exists()){ 
  38.                             //dos.writeUTF("notexists"); 
  39.                             dos.write("notexists".getBytes()); 
  40.                             dos.flush(); 
  41.                             System.out.println("沒有這個文件,無法提供下載!"); 
  42.                             dis.close(); 
  43.                             dos.close(); 
  44.                             socket.close(); 
  45.                             return
  46.                         } 
  47.                         //dos.writeUTF("DownloadReady "+file.length());  
  48.                         dos.write("準備下載".getBytes()); 
  49.                         dos.flush(); 
  50.                          
  51.                         System.out.println("正在接受文件下載..."); 
  52.                         DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));  
  53.    
  54.                         while ((len = fis.read(buf))!= -1) {  
  55.                             dos.write(buf, 0, len); 
  56.                         } 
  57.                         dos.flush(); 
  58.                          
  59.                         fis.close();      
  60.                         System.out.println("文件傳輸完成"); 
  61.                     } 
  62.                     else {  
  63.                         //dos.writeUTF("UploadReady");  
  64.                         dos.write("UploadReady".getBytes()); 
  65.                         dos.flush(); 
  66.                          
  67.                         System.out.println("正在接受文件上傳..."); 
  68.                         DataOutputStream fileOut =  
  69.                             new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file))); 
  70.   
  71.                         while ((len = dis.read(buf))!=-1) {    
  72.                             fileOut.write(buf, 0, len); 
  73.                         } 
  74.                         System.out.println("上傳完畢!"); 
  75.                         fileOut.close();  
  76.                     } 
  77.                     dis.close(); 
  78.                     dos.close(); 
  79.                     socket.close();  
  80.                 } catch (Exception e) { 
  81.                     e.printStackTrace(); 
  82.                 } 
  83.             } 
  84.              
  85.         } 
  86.          
  87.         System.out.println("等待客戶端連接...."); 
  88.         int index = 0
  89.         try { 
  90.             ServerSocket server = new ServerSocket(9527,300); //端口號9527  允許***連接數300 
  91.             while (true) { 
  92.                 Socket socket = server.accept(); 
  93.                 System.out.println("收到第"+(++index)+"個連接"); 
  94.                 new SocketThread(socket).start(); //對每個連接創建一個線程 
  95.             } 
  96.         } catch (Exception e) { 
  97.             e.printStackTrace(); 
  98.         } 
  99.     } 

使用NIO建立的Socket服務器,代碼如下:

  1. import java.io.BufferedInputStream; 
  2. import java.io.BufferedOutputStream; 
  3. import java.io.DataInputStream; 
  4. import java.io.DataOutputStream; 
  5. import java.io.File; 
  6. import java.io.FileInputStream; 
  7. import java.io.FileOutputStream; 
  8. import java.io.IOException; 
  9. import java.net.InetSocketAddress; 
  10. import java.nio.ByteBuffer;  
  11. import java.nio.CharBuffer; 
  12. import java.nio.channels.SelectionKey; 
  13. import java.nio.channels.Selector; 
  14. import java.nio.channels.ServerSocketChannel; 
  15. import java.nio.channels.SocketChannel; 
  16. import java.nio.charset.Charset; 
  17. import java.nio.charset.CharsetDecoder; 
  18. import java.nio.charset.CharsetEncoder; 
  19. import java.util.Iterator; 
  20.  
  21. public class NewSocketServer { 
  22.   
  23.     private static final int port = 9527
  24.     private Selector selector; 
  25.     private ByteBuffer clientBuffer = ByteBuffer.allocate(1024);   
  26.     private CharsetDecoder decoder = Charset.forName("GB2312").newDecoder(); 
  27.     private CharsetEncoder encoder = Charset.forName("GB2312").newEncoder();  
  28.     //編碼解碼格式設置成GBK也行.UTF-8不行,中文亂碼  (前提都是客戶端沒有設置任何編碼解碼格式) 
  29.      
  30.     public void setListener() throws Exception{ 
  31.          
  32.         selector = Selector.open(); //打開選擇器    
  33.          
  34.         ServerSocketChannel server = ServerSocketChannel.open();  //定義一個 ServerSocketChannel通道 
  35.         server.socket().bind(new InetSocketAddress(port));  //ServerSocketChannel綁定端口   
  36.         server.configureBlocking(false);   //配置通道使用非阻塞模式 
  37.         server.register(selector, SelectionKey.OP_ACCEPT); //該通道在selector上注冊  接受連接的動作 
  38.          
  39.         while(true
  40.         {     
  41.             selector.select();   //select() 會阻塞,直到在該selector上注冊的channel有對應的消息讀入 
  42.             Iterator iter = selector.selectedKeys().iterator();    
  43.             while (iter.hasNext()) {     
  44.                 SelectionKey key = (SelectionKey) iter.next();    
  45.                 iter.remove();  // 刪除此消息  
  46.                 process(key);   // 當前線程內處理。(為了高效,一般會在另一個線程中處理此消息) 
  47.             }    
  48.         }    
  49.     } 
  50.      
  51.      private void process(SelectionKey key) throws IOException {    
  52.             if (key.isAcceptable()) { // 接收請求    
  53.                 ServerSocketChannel server = (ServerSocketChannel) key.channel();    
  54.                 SocketChannel channel = server.accept();//類似于io的socket,ServerSocketChannel的accept函數返回 SocketChannel 
  55.                 channel.configureBlocking(false);   //設置非阻塞模式    
  56.                 SelectionKey sKey = channel.register(selector, SelectionKey.OP_READ);  
  57.                 sKey.attach("read_command"); //這兒接收到連接請求之后可以為每個連接設置一個ID 
  58.             }  
  59.             else if (key.isReadable()) { // 讀信息     
  60.                 SocketChannel channel = (SocketChannel) key.channel();    
  61.                 String name = (String) key.attachment();  
  62.                 if(name.equals("read_command")){ 
  63.                     int count = channel.read(clientBuffer);  
  64.                     if (count > 0) {    
  65.                         clientBuffer.flip();    
  66.                         CharBuffer charBuffer = decoder.decode(clientBuffer);    
  67.                         String command = charBuffer.toString();    
  68.                          
  69.                         //command形如:get abc.png 或者  put aaa.png 
  70.                         System.out.println("command===="+command);  //得到客戶端傳來的命令  
  71.                          
  72.                         String[] temp =command.split(" "); 
  73.                         command = temp[0];  //命令  是put還是get 
  74.                         String filename = temp[1];  //文件名 
  75.                          
  76.                         SelectionKey sKey = channel.register(selector,SelectionKey.OP_WRITE);    
  77.                         if(command.equals("put"))sKey.attach("UploadReady#"+filename);  //要保護該通道的文件名 
  78.                         else if(command.equals("get")){  
  79.                             if(!new File("C:\\",filename).exists()){ //假設文件都是在C盤根目錄 
  80.                                 System.out.println("沒有這個文件,無法提供下載!"); 
  81.                                 sKey.attach("notexists");  
  82.                             } 
  83.                             else sKey.attach("DownloadReady#"+filename); //要保護該通道的文件名 
  84.                         } 
  85.                     } else {    
  86.                         channel.close();    
  87.                     }    
  88.                 } 
  89.                 else if(name.startsWith("read_file")){//這兒可以新開一個線程     文件操作也可以用NIO  
  90.                     DataOutputStream fileOut =  
  91.                         new DataOutputStream( 
  92.                                 new BufferedOutputStream( 
  93.                                         new FileOutputStream( 
  94.                                                 new File("C:\\",name.split("#")[1])))); 
  95.   
  96.                     int passlen = channel.read(clientBuffer);   
  97.                     while (passlen>=0) {    
  98.                         clientBuffer.flip();   
  99.                         fileOut.write(clientBuffer.array(), 0, passlen);  
  100.                         passlen = channel.read(clientBuffer); 
  101.                     } 
  102.                     System.out.println("上傳完畢!"); 
  103.                     fileOut.close();  
  104.                     channel.close(); 
  105.                 } 
  106.                 clientBuffer.clear();    
  107.             }  
  108.             else if (key.isWritable()) { // 寫事件    
  109.                 SocketChannel channel = (SocketChannel) key.channel();    
  110.                 String flag = (String) key.attachment();     
  111.                 if(flag.startsWith("downloading")){//這兒可以新開一個線程   文件操作也可以用NIO 
  112.                     DataInputStream fis = new DataInputStream( 
  113.                             new BufferedInputStream( 
  114.                                     new FileInputStream( 
  115.                                             new File("C:\\",flag.split("#")[1]))));  
  116.                       
  117.                     byte[] buf = new byte[1024]; 
  118.                     int len =0;  
  119.                     while ((len = fis.read(buf))!= -1) {  
  120.                         channel.write(ByteBuffer.wrap(buf, 0, len));   
  121.                     }   
  122.                     fis.close();      
  123.                     System.out.println("文件傳輸完成"); 
  124.                     channel.close(); 
  125.                 } 
  126.                 else if(flag.equals("notexists")){  
  127.                     //channel.write(encoder.encode(CharBuffer.wrap(flag)));    
  128.                     channel.write(ByteBuffer.wrap(flag.getBytes())); //不用編碼也行    客戶端直接接收    中文也不是亂碼 
  129.                     channel.close(); 
  130.                 } 
  131.                 else if(flag.startsWith("UploadReady")){  
  132.                     channel.write(encoder.encode(CharBuffer.wrap("UploadReady")));  
  133.                      
  134.                     //這兒如果不重新注冊該通道的讀操作    selector選擇到該通道的將繼續永遠是寫操作,也就無法跳轉到上面的接受上傳的處理 
  135.                     SelectionKey sKey =channel.register(selector, SelectionKey.OP_READ);//register是覆蓋的????!!! 
  136.                     sKey.attach("read_file#"+flag.split("#")[1]); 
  137.                     //key.attach("read_file#"+flag.split("#")[1]); //select不到讀操作 
  138.                 } 
  139.                 else if(flag.startsWith("DownloadReady")){  
  140.                     channel.write(ByteBuffer.wrap("準備下載".getBytes()));  
  141.                     //channel.write(encoder.encode(CharBuffer.wrap("準備下載")));    
  142.                     key.attach("downloading#"+flag.split("#")[1]); 
  143.                 }  
  144.             }   
  145.         }    
  146.      
  147.     public static void main(String[] args) { 
  148.          
  149.         try { 
  150.              System.out.println("等待來至" + port + "端口的客戶端連接.....");  
  151.             new NewSocketServer().setListener(); 
  152.         } catch (Exception e) { 
  153.             e.printStackTrace(); 
  154.         } 
  155.  
  156.     } 

客戶端代碼如下:

  1. import java.io.*; 
  2. import java.net.InetAddress; 
  3. import java.net.Socket; 
  4. import java.util.Scanner; 
  5.  
  6. public class ClientMain { 
  7.  
  8.     private   int ServerPort = 9527
  9.     private   String ServerAddress = "192.168.1.154"
  10.     private   String GetOrPut = "get";    
  11.     private   String local_filename = "";  
  12.     private   String remote_filename  = "";  
  13.     private   byte[] buf; 
  14.     private   int len; 
  15.     class SocketThread extends Thread{ 
  16.          
  17.         @Override 
  18.         public void run() { 
  19.              try { 
  20.                  
  21.                 File file = new File("C:\\",local_filename); //假設文件放在C盤 
  22.                 if(!file.exists()&&GetOrPut.equals("put")){  
  23.                     System.out.println("本地沒有這個文件,無法上傳!");  
  24.                     return
  25.                 }  
  26.                  
  27.                 InetAddress loalhost = InetAddress.getLocalHost(); 
  28.                 Socket socket = new Socket(ServerAddress,ServerPort,loalhost,44); 
  29.                                             //服務器IP地址  端口號   本機IP 本機端口號 
  30.                 DataInputStream dis = new DataInputStream(socket.getInputStream()); 
  31.                 DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); 
  32.                   
  33.                 //dos.writeUTF(GetOrPut+" "+remote_filename);//服務器端如果是io的socket,writeUTF和writeUTF對接 
  34.                 dos.write((GetOrPut+" "+remote_filename).getBytes()); 
  35.                 dos.flush();  
  36.                
  37.                 //String tempString = dis.writeUTF();  
  38.                 buf = new byte[1024]; 
  39.                 len = dis.read(buf); 
  40.                 String tempString = new String(buf,0,len);//服務器反饋的信息 
  41.                  
  42.                 //System.out.println(tempString);  
  43.                 if(tempString.equals("notexists")){ 
  44.                     System.out.println("服務器沒有這個文件,無法下載!");  
  45.                     dos.close(); 
  46.                     dis.close(); 
  47.                     socket.close(); 
  48.                     return
  49.                 } 
  50.                  
  51.                 if(tempString.startsWith("準備下載")){   
  52.                     DataOutputStream fileOut =  
  53.                         new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file))); 
  54.   
  55.                     while ((len = dis.read(buf))!=-1) {    
  56.                         fileOut.write(buf, 0, len); 
  57.                     } 
  58.                     System.out.println("下載完畢!"); 
  59.                     fileOut.close(); 
  60.                     dos.close(); 
  61.                     dis.close(); 
  62.                     socket.close(); 
  63.                 } 
  64.                 else if(tempString.equals("UploadReady")){   
  65.                     System.out.println("正在上傳文件......."); 
  66.                     DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));  
  67.                        
  68.                     while ((len = fis.read(buf))!= -1) {   
  69.                         dos.write(buf, 0, len); 
  70.                     } 
  71.                     dos.flush(); 
  72.                     System.out.println("上傳完畢!"); 
  73.                     fis.close(); 
  74.                     dis.close(); 
  75.                     dos.close(); 
  76.                     socket.close(); 
  77.                 } 
  78.                  
  79.             } catch (Exception e) { 
  80.                 e.printStackTrace(); 
  81.             } 
  82.         } 
  83.          
  84.     } 
  85.      
  86.     public boolean checkCommand(String command) 
  87.     {  
  88.         if(!command.startsWith("put")&&!command.startsWith("get")){ 
  89.             System.out.println("輸入命令錯誤"); 
  90.             return false
  91.         } 
  92.          
  93.         int index = -1
  94.         String temp = ""
  95.         String[] tempStrings = null
  96.          
  97.         if((index=command.indexOf("-h"))>0){ 
  98.             temp = command.substring(index+3); 
  99.             temp = temp.substring(0, temp.indexOf(' ')); 
  100.             ServerAddress = temp; 
  101.         } 
  102.         if((index=command.indexOf("-p"))>0){ 
  103.             temp = command.substring(index+3); 
  104.             temp = temp.substring(0, temp.indexOf(' ')); 
  105.             ServerPort = Integer.valueOf(temp); 
  106.         } 
  107.          
  108.         tempStrings = command.split(" "); 
  109.         if(command.startsWith("put")){ 
  110.             GetOrPut = "put"
  111.             local_filename = tempStrings[tempStrings.length-2]; 
  112.             remote_filename = tempStrings[tempStrings.length-1]; 
  113.         } 
  114.         else if(command.startsWith("get")){ 
  115.             GetOrPut = "get"
  116.             local_filename = tempStrings[tempStrings.length-1]; 
  117.             remote_filename = tempStrings[tempStrings.length-2]; 
  118.         } 
  119.          
  120.         return true
  121.     } 
  122.      
  123.     public static void main(String[] args) { 
  124.         ClientMain thisC= new ClientMain();  
  125.         Scanner sc = new Scanner(System.in); 
  126.         String commandString = ""
  127.         do { 
  128.             System.out.println("請輸入命令:");  
  129.             commandString = sc.nextLine(); 
  130.         } while (!thisC.checkCommand(commandString));  
  131.          
  132.         ClientMain.SocketThread a = thisC.new SocketThread(); 
  133.         a.start(); 
  134.     } 

原文鏈接:http://tonl.iteye.com/blog/1202817

【編輯推薦】

  1. 用Java.nio.* 進行網絡編程
  2. Java NIO的wakeup剖析
  3. Java NIO類庫關系圖解
  4. 淺析Tomcat NIO 配置
  5. Java NIO API詳解
責任編輯:林師授 來源: tonlion2046的博客
相關推薦

2010-03-19 17:04:01

Java socket

2010-09-06 17:08:23

2011-12-08 10:12:34

JavaNIO

2010-09-02 14:56:03

建立DHCP服務器

2009-11-23 17:23:59

DNS服務器內部建立

2010-08-03 11:49:26

Ubuntu nfs服

2011-12-08 13:04:06

JavaNIO

2010-09-02 11:20:47

SQL刪除

2010-08-26 13:04:06

DHCP服務器

2010-09-28 15:18:27

如何建立DHCP服務器

2015-07-09 09:49:39

PHPSocket服務器

2011-12-08 09:37:36

JavaNIO

2011-03-11 09:51:47

Java NIO

2009-10-15 10:46:35

虛擬化主機熱備份

2010-08-06 13:12:55

NFS服務器

2010-07-21 11:29:24

2010-11-08 17:20:54

SQL Server跨

2010-08-23 17:31:23

LinuxDHCP服務器

2010-03-19 15:01:23

Java Socket

2019-10-15 09:09:15

FTP服務器 TFTP
點贊
收藏

51CTO技術棧公眾號

国内成人自拍视频| 欧美一区在线观看视频| 久久久久久久久久久久久久久99| 日本一欧美一欧美一亚洲视频| 一级黄色性视频| 亚洲一区有码| 亚洲成人第一页| 欧美日韩高清免费| 国产三级小视频| 亚洲乱码视频| 在线日韩中文字幕| 岛国av免费观看| 日本一道高清亚洲日美韩| 亚洲天堂福利av| 精品毛片久久久久久| 中文字幕久久久久| 国内精品久久久久久久97牛牛 | 亚洲精品视频一区二区三区| 久久精品中文字幕| 亚洲xxxx2d动漫1| 欧美人与禽性xxxxx杂性| 久久视频一区二区| 91久久大香伊蕉在人线| av手机天堂网| 99在线精品视频在线观看| 日韩网站在线观看| 亚洲色成人网站www永久四虎| 亚洲网一区二区三区| 在线观看一区二区视频| 日本www在线视频| 国产在线1区| 中文字幕 久热精品 视频在线| 高清视频一区二区三区| 亚洲一区中文字幕在线| 久久精品亚洲| 国内精品小视频在线观看| 一级片一级片一级片| 欧美亚洲精品在线| 精品香蕉在线观看视频一| 日本中文字幕精品| 在线免费成人| 欧美日韩一级片在线观看| 激情综合在线观看| 欧美a级在线观看| 亚洲6080在线| 国产aaa免费视频| gogo在线高清视频| 国产精品成人免费| 日韩欧美一区二区三区四区| 亚州视频一区二区三区| 99免费精品在线| 国产高清自拍99| 亚洲av无码乱码国产精品久久| 久久99在线观看| 国产精品永久免费视频| 九九热最新视频| 日日夜夜免费精品| 日韩美女在线观看| 黄色一级视频免费看| 亚洲欧美日本国产专区一区| 茄子视频成人在线| 6080午夜伦理| gogo在线观看| 国产一区二区三区亚洲| 911精品产国品一二三产区| 第四色婷婷基地| 成人午夜一级| 91精品国产综合久久婷婷香蕉| 最新免费av网址| 国产精品亚洲欧美一级在线| 日韩一区二区影院| 娇妻高潮浓精白浆xxⅹ| 美女一区二区在线观看| 国产丝袜一区二区三区| 丰腴饱满的极品熟妇| 精品高清久久| 日韩性生活视频| 午夜剧场免费在线观看| 欧美日韩视频| 91av在线免费观看视频| 中文字幕免费视频观看| 精品一区二区av| www.成人av| 神马一区二区三区| 国产欧美日韩亚州综合| 一区二区三区不卡在线| 新版中文在线官网| 高跟丝袜欧美一区| 浓精h攵女乱爱av| 欧美影院精品| 亚洲视频电影图片偷拍一区| 日本黄色激情视频| 好吊视频一区二区三区四区| 久久久噜噜噜久噜久久| 久久久久久久久久久影院| 老色鬼精品视频在线观看播放| av成人午夜| 精品亚洲综合| 亚洲精品久久久久久国产精华液| 波多野结衣家庭教师在线播放| 性欧美freehd18| 欧美一级理论片| 爱爱的免费视频| 婷婷亚洲五月| 国产不卡在线观看| 亚洲欧美激情在线观看| 国产欧美一区二区精品性色超碰| 美女在线免费视频| 欧美日韩视频网站| 精品欧美乱码久久久久久1区2区| 亚洲精品二区| 韩国三级与黑人| 一区二区三区四区精品视频| 亚洲色图13p| 久久久精品国产sm调教| 日韩国产成人精品| 国新精品乱码一区二区三区18| 超碰97在线免费观看| 亚洲午夜在线视频| 五月婷婷之婷婷| 亚洲精品亚洲人成在线观看| 久久国产精品首页| 久草热在线观看| 91在线一区二区| 国产精品一二三在线观看| 亚洲欧洲自拍| 亚洲韩国青草视频| 午夜69成人做爰视频| 蜜臀精品久久久久久蜜臀| 激情一区二区三区| 亚洲精品天堂| 欧美高清dvd| 变态另类ts人妖一区二区| 亚洲三级观看| 99视频国产精品免费观看| 日本在线www| 日本道在线观看一区二区| 久久久久成人精品无码中文字幕| 亚洲最新色图| 国产在线观看91精品一区| 久草视频在线看| 色综合久久中文综合久久97| 伦理片一区二区| 欧美成人高清| 97超碰人人看人人| 超碰在线观看免费版| 欧美日韩亚洲另类| 毛片视频免费播放| 美腿丝袜一区二区三区| 欧洲一区二区在线观看| 韩国美女久久| 亚洲男人的天堂在线| 人人草在线观看| 国产网红主播福利一区二区| 久章草在线视频| 久久99久久人婷婷精品综合 | 1区2区在线| 精品乱码亚洲一区二区不卡| 青青草精品在线视频| 国产乱人伦精品一区二区在线观看| 亚洲欧洲日韩综合二区| 国产伦精品一区二区三区精品| 久久99精品久久| 欧美日韩1234| 免费高清在线观看电视| 国产一区二区精品久久91| 五月天在线免费视频| 国产精品亚洲一区二区在线观看| 久久成人精品视频| www日本视频| 亚洲成人免费电影| 中文文字幕文字幕高清| 销魂美女一区二区三区视频在线| 欧美一区二区三区电影在线观看| 日韩高清不卡| 久久久精品中文字幕| 亚洲国产精彩视频| 五月天网站亚洲| 加勒比综合在线| 久久国产精品99精品国产| 路边理发店露脸熟妇泻火| 国产精品视屏| 日本视频久久久| 久久77777| 亚洲丁香久久久| 69亚洲精品久久久蜜桃小说 | 亚洲精品看片| 欧美日韩国产精品一卡| 久久精品xxxxx| 色中色综合影院手机版在线观看| 天天操天天干天天舔| 色综合久久天天综合网| 精品国产国产综合精品| 成人免费毛片app| 久草在在线视频| 你懂的成人av| 欧美日韩综合精品| 91精品网站在线观看| 国模精品视频一区二区| 韩国福利在线| 日韩欧美在线综合网| 丁香六月婷婷综合| 日韩毛片高清在线播放| 水蜜桃av无码| 国产主播一区二区三区| 欧美 日韩 激情| 7777久久香蕉成人影院| 久久久久高清| 日韩三级av高清片| 国产精品99久久久久久人 | 在线观看视频二区| 五月婷婷综合网| 国内成人精品视频| 日本美女bbw| 成人精品一区二区三区四区| 亚洲五月天综合| 在线视频观看日韩| 黄色网址在线免费看| 九九免费精品视频在线观看| 亚洲最大福利视频| 欧美123区| 性欧美长视频免费观看不卡| 黄网站在线免费看| 亚洲欧美激情四射在线日| 精品国产亚洲av麻豆| 欧美视频中文字幕| 日本韩国欧美中文字幕| 亚洲综合另类小说| av最新在线观看| 国产片一区二区三区| 艳妇乳肉亭妇荡乳av| 国产成人啪免费观看软件| 深夜黄色小视频| 老色鬼久久亚洲一区二区| 久久国产精品网| 欧美一区视频| 国产成人免费高清视频| 91亚洲国产高清| 亚洲激情啪啪| 精品欧美久久| 日韩欧美精品一区二区三区经典| 欧美人妖视频| 国产综合av一区二区三区| 亚洲91网站| 亚洲一区二区三区sesese| 色成人综合网| 国产精品丝袜久久久久久不卡| 三上悠亚国产精品一区二区三区| 26uuu久久噜噜噜噜| 日本不卡免费高清视频在线| 97精品免费视频| а√天堂资源官网在线资源| 久久久久久久一区二区| 国产黄色大片在线观看| 久久久久久久亚洲精品| 超碰99在线| 97色在线视频| 中文不卡1区2区3区| 日本成人在线视频网址| 国产免费不卡| 国产精品入口福利| 97精品资源在线观看| 91久久国产综合久久蜜月精品 | 岛国一区二区三区高清视频| 日韩欧美高清一区二区三区| 懂色一区二区三区av片| 久久精品亚洲成在人线av网址| 国产亚洲欧美另类一区二区三区| 欧美午夜18电影| 欧美日韩一区二区视频在线| 国产成人一区| 在线精品高清中文字幕| 美国黄色一级毛片| 久久久av毛片精品| 九一在线免费观看| 亚洲乱码国产乱码精品精可以看| 九九视频在线观看| 亚洲成a人片综合在线| av大片免费观看| 在线视频亚洲一区| 国产理论片在线观看| 日韩精品一区二区三区四区 | 麻豆免费精品视频| 四虎1515hh.com| caoporn国产一区二区| 中国美女乱淫免费看视频| 国产农村妇女精品| 久久精品视频免费在线观看| 精品成人乱色一区二区| 国产精品国产精品国产| 日韩视频中午一区| 亚洲欧美丝袜中文综合| 日韩中文字幕精品| aaa在线播放视频| 日本一区二区三区在线播放| 亚洲精品三区| 精品日本一区二区| 国产精品毛片一区二区在线看| 777av视频| 毛片一区二区三区| 无码一区二区精品| 专区另类欧美日韩| 国产精品va无码一区二区三区| 欧美久久高跟鞋激| 亚洲日本国产精品| 久久精品视频在线观看| 亚洲国产成人二区| 91精品婷婷国产综合久久蝌蚪| 你微笑时很美电视剧整集高清不卡| 中文字幕欧美日韩一区二区三区| 亚洲精品乱码| 亚洲在线观看网站| 国产午夜精品久久| 久久久午夜影院| 日韩午夜激情av| 97视频在线观看网站| 97成人超碰免| 亚洲精品一区二区三区中文字幕| 青青草原成人| 亚洲清纯自拍| 久久久久亚洲av片无码v| 国产精品视频线看| 亚洲高清资源综合久久精品| 男人影院在线观看| 欧美激情一区二区三区成人| 亚洲精品毛片| 欧美最大成人综合网| 亚洲经典在线| 成人欧美精品一区二区| 亚洲欧洲日产国码二区| 中国女人一级一次看片| 亚洲欧美自拍一区| 日本黄色免费在线| 国产私拍一区| 亚洲性视频h| 99久久综合网| 亚洲欧美一区二区久久| 一级久久久久久久| 中文字幕日本欧美| 亚洲四虎影院| 日本不卡二区| 三级成人在线视频| 性高潮久久久久久久| 高跟丝袜一区二区三区| 天堂中文在线资| 5566成人精品视频免费| 黄色成人美女网站| 国产va亚洲va在线va| 成人a免费在线看| 国产亚洲成人av| 日韩美女天天操| 青青在线视频| av电影成人| 影音先锋久久| 日本黄色动态图| 欧美日韩亚洲视频一区| 亚洲色偷精品一区二区三区| 97视频在线观看免费高清完整版在线观看 | 久久国产亚洲精品无码| 99久久久无码国产精品| 亚洲男人的天堂在线视频| 亚洲免费av片| 日韩一区二区三区免费| 亚洲成人精品电影在线观看| 蜜臀久久久99精品久久久久久| 久久一级免费视频| 欧美高清精品3d| 一二三四区在线观看| 成人做爰66片免费看网站| 中日韩男男gay无套| 少妇大叫太粗太大爽一区二区| 色婷婷激情久久| 91社区在线观看| 1卡2卡3卡精品视频| 欧美午夜在线| 一出一进一爽一粗一大视频| 在线免费不卡视频| 国产色在线观看| 国产一区二区中文字幕免费看| 亚洲尤物在线| 人妻熟人中文字幕一区二区| 欧美一区二区三区精品| jizzjizz中国精品麻豆| 热舞福利精品大尺度视频| 久久99久久精品欧美| 精品深夜av无码一区二区老年| 精品网站999www| 日日夜夜亚洲| www.av中文字幕| 看亚洲a级一级毛片| 日韩在线精品视频| 精品午夜视频| 欧美亚洲另类色图| 综合久久久久久| 天堂在线资源库| 国产主播欧美精品| 国产乱码精品| 国精品无码一区二区三区| 国产视频久久网| 久久久久久久久久久久电影|