日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java實現聊天機器人完善版

瀏覽:194日期:2022-08-09 11:23:22

本文實例為大家分享了Java實現聊天機器人完善版的具體代碼,供大家參考,具體內容如下

Java實現聊天機器人完善版

Client代碼:

package GUISocket.chat.Client;import javax.swing.JFrame;import javax.swing.JPanel;import java.awt.EventQueue; import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JTextField;import javax.swing.DefaultListModel;import javax.swing.JButton;import javax.swing.JTextArea;import javax.swing.JScrollPane;import javax.swing.ScrollPaneConstants;import javax.swing.border.EmptyBorder; import java.awt.event.ActionListener;import java.awt.event.ActionEvent; public class ClientForm extends JFrame { private JPanel contentPane; DefaultListModel<String> itemUsers; private JTextField textIP; private JTextField textPort; public JTextField textUser; public JTextArea textLog; public JList listUser; public JTextArea textSend ; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { ClientForm frame = new ClientForm(); frame.setVisible(true); ClientMG.getClientMG().setClientForm(frame); } catch (Exception e) { e.printStackTrace(); } } }); } public ClientForm() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 589, 607); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JLabel label = new JLabel('配置信息'); label.setBounds(10, 10, 54, 15); contentPane.add(label); JLabel lblIp = new JLabel('IP'); lblIp.setBounds(10, 35, 27, 15); contentPane.add(lblIp); textIP = new JTextField(); textIP.setText('192.168.1.6'); textIP.setBounds(33, 35, 92, 21); contentPane.add(textIP); textIP.setColumns(10); JLabel label_1 = new JLabel('端口'); label_1.setBounds(137, 35, 38, 15); contentPane.add(label_1); textPort = new JTextField(); textPort.setText('8900'); textPort.setBounds(168, 32, 66, 21); contentPane.add(textPort); textPort.setColumns(10); JLabel label_2 = new JLabel('用戶名'); label_2.setBounds(255, 38, 54, 15); contentPane.add(label_2); textUser = new JTextField(); textUser.setBounds(302, 35, 66, 21); contentPane.add(textUser); textUser.setColumns(10); JButton LOGIN = new JButton('登錄'); LOGIN.setBounds(395, 34, 66, 23); contentPane.add(LOGIN); JButton btnClose = new JButton('關閉'); btnClose.setBounds(480, 31, 71, 23); contentPane.add(btnClose); JPanel panel = new JPanel(); panel.setBounds(0, 10, 573, 61); contentPane.add(panel); panel.setLayout(null); JPanel panel_1 = new JPanel(); panel_1.setBounds(0, 81, 573, 369); contentPane.add(panel_1); panel_1.setLayout(null); JLabel label_3 = new JLabel('聊天記錄'); label_3.setBounds(10, 10, 54, 15); panel_1.add(label_3); JScrollPane scrollPane = new JScrollPane(); scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); scrollPane.setBounds(20, 35, 323, 324); panel_1.add(scrollPane); textLog = new JTextArea(); textLog.setWrapStyleWord(true); textLog.setLineWrap(true); scrollPane.setViewportView(textLog); JLabel label_4 = new JLabel('在線用戶'); label_4.setBounds(351, 10, 54, 15); panel_1.add(label_4); JScrollPane scrollPane_1 = new JScrollPane(); scrollPane_1.setBounds(353, 35, 210, 324); panel_1.add(scrollPane_1); this.itemUsers=new DefaultListModel<String>(); this.listUser=new JList(itemUsers); scrollPane_1.setViewportView(this.listUser); JPanel panel_2 = new JPanel(); panel_2.setBounds(10, 449, 553, 119); contentPane.add(panel_2); panel_2.setLayout(null); JLabel label_5 = new JLabel('操作'); label_5.setBounds(10, 10, 54, 15); panel_2.add(label_5); JScrollPane scrollPane_2 = new JScrollPane(); scrollPane_2.setBounds(10, 22, 533, 64); panel_2.add(scrollPane_2); textSend = new JTextArea(); textSend.setWrapStyleWord(true); textSend.setLineWrap(true); scrollPane_2.setViewportView(textSend); JButton button_1 = new JButton('群發'); button_1.addActionListener(new Button_1ActionListener()); button_1.setBounds(307, 86, 93, 23); panel_2.add(button_1); JButton sendMG = new JButton('發送'); sendMG.addActionListener(new SendMGActionListener()); sendMG.setBounds(432, 86, 93, 23); panel_2.add(sendMG); LOGIN.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //連接服務器user String IP=textIP.getText().trim(); int port=Integer.parseInt(textPort.getText().trim()); String user=textUser.getText().trim();if(ClientMG.getClientMG().Connect(IP,port,user)) { ClientMG.getClientMG().setLogTxt('已經連接到服務器'); } else { ClientMG.getClientMG().setLogTxt('連接服務器失敗'); } } }); } private class SendMGActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { //發送信息 //1.獲取選擇的用戶名稱 //2.發送給服務器端含有接收用戶信息的交互協議串 String SenderName=ClientMG.getClientMG().getClientThd().getName(); String RecName=listUser.getSelectedValue().toString(); String MSGinfo=textSend.getText().trim(); String sMsg='MSG|'+SenderName+'|'+RecName+'|'+MSGinfo; ClientMG.getClientMG().getClientThd().sendMsg(sMsg); //將消息內容顯示到聊天記錄中 //[發送者] //消息內容 //清空發送消息框 ClientMG.getClientMG().setLogTxt('[我]:'); ClientMG.getClientMG().setLogTxt(MSGinfo); textSend.setText(''); } } private class Button_1ActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { //群發信息 //1.獲取選擇的用戶名稱 //2.發送給服務器端含有接收用戶信息的交互協議串 //發送到服務器,MSG|SenderName|RecName|MSGInfo String SenderName=ClientMG.getClientMG().getClientThd().getName(); String RecName='ALL'; String MSGinfo=textSend.getText().trim(); String sMsg='MSG|'+SenderName+'|'+RecName+'|'+MSGinfo; ClientMG.getClientMG().getClientThd().sendMsg(sMsg); //將消息內容顯示到聊天記錄中 //[發送者] //消息內容 //清空發送消息框 ClientMG.getClientMG().setLogTxt('[我]:'); ClientMG.getClientMG().setLogTxt(MSGinfo); textSend.setText(''); } } }

ClientMG代碼:

package GUISocket.chat.Client; import java.net.Socket; public class ClientMG { private static final ClientMG clientmg=new ClientMG(); private ClientMG() {} public static ClientMG getClientMG() { return clientmg; } private ClientForm clientWin; public void setClientForm(ClientForm c) { clientWin=c; } public void setLogTxt(String str) { clientWin.textLog.append(str+'rn'); } public void addItem(String user) { clientWin.itemUsers.addElement(user); } public void addItems(String[] users) { for(int i=0;i<users.length;i++) { clientWin.itemUsers.addElement(users[i]); } } SocketThread sthd; public boolean Connect(String IP,int port,String user) { Socket socket=null; try { socket=new Socket(IP,port); sthd=new SocketThread(socket, user); sthd.start(); return true; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return false; } } public SocketThread getClientThd() { return sthd; }}

SocketThread代碼:

package GUISocket.chat.Client; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket; public class SocketThread extends Thread{ BufferedReader br=null; PrintWriter pw=null; Socket socket=null; public SocketThread(Socket socket,String user){ super(user);//登錄時用的用戶名 this.socket=socket; } public void run() { try { br=new BufferedReader(new InputStreamReader(socket.getInputStream(), 'UTF-8')); pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),'UTF-8'))); String sLOGIN='LOGIN|'+this.getName(); sendMsg(sLOGIN); String str=''; while((str=br.readLine())!=null) { String[] commands=str.split('|'); if(commands[0].equals('USERLISTS')) {//USERLISTS|user1_user2_user3 String[] sUsers=commands[1].split('_'); ClientMG.getClientMG().addItems(sUsers); } else if(commands[0].equals('ADD')) {//ADD|UserName String sNewUser=commands[1]; ClientMG.getClientMG().addItem(sNewUser); } else if(commands[0].equals('MSG')) {//格式 MSG|SenderName|MSGinfo String SenderName=commands[1]; String MSGinfo=commands[2]; //將消息內容顯示到聊天記錄中 //[發送者] //消息內容 ClientMG.getClientMG().setLogTxt('['+SenderName+']'); ClientMG.getClientMG().setLogTxt(MSGinfo); } //ClientMG.getClientMG().setLogTxt(str); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { try { if(pw!=null) pw.close(); if(br!=null) br.close(); if(socket!=null) socket.close(); } catch (Exception e2) { // TODO: handle exception } } } public void sendMsg(String str) { pw.println(str); pw.flush(); }}

ServerForm代碼:

package GUISocket.chat.Server;import javax.swing.JFrame;import javax.swing.JPanel;import java.awt.EventQueue; import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.JButton;import javax.swing.JTextArea;import javax.swing.JScrollPane;import javax.swing.ScrollPaneConstants;import javax.swing.border.EmptyBorder; import java.awt.event.ActionListener;import java.awt.event.ActionEvent; public class ServerForm extends JFrame { /** * */ private JPanel contentPane; public JTextArea textLog; private JTextField textPort; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { ServerForm frame = new ServerForm(); frame.setVisible(true); ServerMG.getServerMG().setServerForm(frame); } catch (Exception e) { e.printStackTrace(); } } }); } public ServerForm() { setTitle('多人聊天服務器'); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 510, 566); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JLabel lblNewLabel = new JLabel('配置信息'); lblNewLabel.setBounds(20, 10, 54, 15); contentPane.add(lblNewLabel); JLabel label = new JLabel('端口:'); label.setBounds(30, 34, 39, 15); contentPane.add(label); textPort = new JTextField(); textPort.setText('8900'); textPort.setBounds(65, 31, 66, 21); contentPane.add(textPort); textPort.setColumns(10); JButton btnStart = new JButton('開啟服務'); btnStart.addActionListener(new BtnStartActionListener()); btnStart.setBounds(180, 30, 93, 23); contentPane.add(btnStart); JButton btnClose = new JButton('關閉服務'); btnClose.addActionListener(new BtnCloseActionListener()); btnClose.setBounds(325, 30, 93, 23); contentPane.add(btnClose); JPanel panel = new JPanel(); panel.setBounds(10, 10, 474, 54); contentPane.add(panel); panel.setLayout(null); JLabel label_1 = new JLabel('消息記錄'); label_1.setBounds(10, 94, 54, 15); contentPane.add(label_1); JPanel panel_1 = new JPanel(); panel_1.setBounds(0, 81, 474, 436); contentPane.add(panel_1); panel_1.setLayout(null); JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(10, 41, 464, 368); panel_1.add(scrollPane); scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); textLog = new JTextArea(); textLog.setLineWrap(true); textLog.setWrapStyleWord(true); scrollPane.setViewportView(textLog); } private class BtnCloseActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { } } private class BtnStartActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { //開啟服務 int port=Integer.parseInt(textPort.getText().trim()); if(ServerMG.getServerMG().CreateServer(port)) { ServerMG.getServerMG().setLogTxt('服務器開啟...'); } else { ServerMG.getServerMG().setLogTxt('服務器開啟失敗...'); } } }}

ServerListener代碼:

package GUISocket.chat.Server; import java.net.ServerSocket;import java.net.Socket; public class ServerListener extends Thread{ Socket socket=null; ServerSocket server=null; public ServerListener(ServerSocket server) { this.server=server; } public void run() { try { while(true) { socket=server.accept(); ServerMG.getServerMG().setLogTxt('客戶端: '+socket); new SocketThread(socket).start(); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }

SeverMG代碼:

package GUISocket.chat.Server; import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList; import javax.swing.JTextArea; public class ServerMG { private static final ServerMG servermg=new ServerMG(); private ServerMG() {} public static ServerMG getServerMG() { return servermg; } //主界面的操作 private ServerForm serverWin; //將窗體對象注冊到管理類當中 public void setServerForm(ServerForm s) { serverWin=s; } //設置主界面 public void setLogTxt(String str) { serverWin.textLog.append(str+'rn'); } private ServerSocket server; public boolean CreateServer(int port) { try { server=new ServerSocket(port); new ServerListener(server).start(); return true; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return false; } } //ArrayList操作 ArrayList<SocketThread> a1OnlineList=new ArrayList<>();//存放所有和 public synchronized void addList(SocketThread sc) { //限制重名 a1OnlineList.add(sc); } public void clearList() { a1OnlineList.clear(); } public synchronized void removeList(SocketThread sc) { for(int i=0;i<a1OnlineList.size();i++) { SocketThread s=a1OnlineList.get(i); if(s.equals(sc)) { a1OnlineList.remove(sc); break; } } } //信息的管理 public void getOnlineNames(SocketThread sc) { //非第1次登錄時,得到所有的在線用戶 if(a1OnlineList.size()>0) { String sUsers='';//給客戶端,USERLISTS|user1_user2_user3 for(int i=0;i<a1OnlineList.size();i++) { SocketThread s=a1OnlineList.get(i); sUsers+=s.getName()+'_'; } sc.sendMsg('USERLISTS|'+sUsers); } } public void sendNewUsertoAll(SocketThread sc) { for(int i=0;i<a1OnlineList.size();i++) { SocketThread s=a1OnlineList.get(i); s.sendMsg('ADD|'+sc.getName()); } } //通過Mame用戶名查找目標 public SocketThread getSocketThreadByName(String sName) { for(int i=0;i<a1OnlineList.size();i++) { SocketThread s=a1OnlineList.get(i); if(s.getName().equals(sName)) { return s; } } return null; } //發送給所有人,但是要排除自身 public void sendMsgtoAll(String sMsg,SocketThread sc) { for(int i=0;i<a1OnlineList.size();i++) { SocketThread s=a1OnlineList.get(i); if(!s.equals(sc)) { s.sendMsg(sMsg); } } } }

SocketThread代碼:

package GUISocket.chat.Server; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket; public class SocketThread extends Thread{ BufferedReader br=null; PrintWriter pw=null; Socket socket=null; public SocketThread(Socket socket) { this.socket = socket; } public void run() { try { br=new BufferedReader(new InputStreamReader(socket.getInputStream(), 'UTF-8')); pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),'UTF-8'))); String str=''; while((str=br.readLine())!=null) {//循環響應客戶的發送信息//接受客戶端發過來的信息 String [] commands=str.split('|');if(commands[0].equals('LOGIN')) {//解析登錄請求,格式,LOGIN|UserName String sUSER=commands[1]; this.setName(sUSER);//將用戶名信息放入Threadname中 //1.得到所有在線用戶信息名稱,發回客戶端:USERLISTS|user1_user2_user3 ServerMG.getServerMG().getOnlineNames(this); //2.將當前登錄用戶的信息(用戶名),發送給已經在線的其他用戶,ADD|userName ServerMG.getServerMG().sendNewUsertoAll(this); //3.將當前登錄的Socket信息放入ArrayList中 ServerMG.getServerMG().addList(this); } else if(commands[0].equals('MSG')) {//格式:MSG|SenderName|RecName|MSGoinfo String SenderName=commands[1]; String RecName=commands[2]; String MSGinfo=commands[3]; //群聊 if(RecName.equals('ALL')) { String sMsg='MSG!'+SenderName+'|'+MSGinfo;//格式:MSG|SenderName|MSGinfo ServerMG.getServerMG().sendMsgtoAll(sMsg,this); ServerMG.getServerMG().setLogTxt(SenderName+'發送信息['+MSGinfo+']到所有人。'); } //私聊 else { //通過RecName用戶名查找,找到目標SocketThread SocketThread sc=ServerMG.getServerMG().getSocketThreadByName(RecName); if(sc!=null) {//目標對象發送信息,MSG|SenderName|MSGinfoString sMsg='MSG!'+SenderName+'|'+MSGinfo;sc.sendMsg(sMsg);//寫入信息日志ServerMG.getServerMG().setLogTxt(SenderName+'發送信息['+MSGinfo+']到'+RecName); } } } } } catch (Exception e) { e.printStackTrace(); }finally { try { if(pw!=null) pw.close(); if(br!=null) br.close(); if(socket!=null) socket.close(); } catch (Exception e2) { // TODO: handle exception } } } public void closeChat() { try { if(pw!=null) pw.close(); if(br!=null) br.close(); if(socket!=null) socket.close(); } catch (Exception e) { e.printStackTrace(); } } public void sendMsg(String str) { pw.println(str); pw.flush(); }}

實現結果如下:

Java實現聊天機器人完善版

Java實現聊天機器人完善版

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩美女一区二区三区在线观看| 免费视频一区二区三区在线观看 | 色婷婷色综合| 精品视频高潮| 日韩av在线中文字幕| 欧美黄色一区二区| 四虎国产精品免费观看| 黄在线观看免费网站ktv| 日韩欧美在线中字| 香蕉精品久久| 蜜臀久久99精品久久久画质超高清| 中文精品在线| 亚洲青青久久| 老鸭窝一区二区久久精品| 国产一区二区三区不卡视频网站 | 欧美一区成人| 国语对白精品一区二区| 今天的高清视频免费播放成人| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲欧美久久精品| 国产精品第一| 99精品视频精品精品视频| 一区二区视频欧美| 欧美日韩一区二区三区不卡视频| 另类综合日韩欧美亚洲| 日韩伦理一区| 国产综合激情| 欧美日韩在线精品一区二区三区激情综合 | 免费日韩视频| 国产精品一在线观看| 97精品中文字幕| 国产精品试看| 国产日韩高清一区二区三区在线 | 国产精品大片| 在线看片不卡| 久久99精品久久久久久园产越南 | 婷婷丁香综合| 青青草国产精品亚洲专区无| 精品久久中文| 香蕉视频成人在线观看| 国产日韩欧美一区在线| 久久蜜桃精品| 欧美精品影院| 在线日韩电影| 欧美黄色精品| 亚洲最大av| 日韩精品一区二区三区免费观影| 蜜臀久久99精品久久久久宅男| 久久精品资源| 伊人久久亚洲| 蜜桃成人av| 美女精品久久| 一区二区日韩免费看| 亚洲永久av| 久久精品99久久久| 免费精品视频| 亚洲天堂成人| 欧美激情亚洲| 综合亚洲视频| 日韩一级网站| 免费看av不卡| 欧美成人aaa| 蜜臀精品一区二区三区在线观看| 成人午夜亚洲| 国产精品久久久久久久久久妞妞| 久久午夜精品| 欧美日韩一二三四| 久久97久久97精品免视看秋霞| 婷婷久久免费视频| 91九色精品| 成人久久一区| 美女在线视频一区| 亚洲精品九九| 99成人在线| 日产精品一区| 丰满少妇一区| 精品国产欧美日韩一区二区三区| 综合一区av| 亚洲一区二区网站| 黄色国产精品| 国产一区欧美| 久久久夜精品| 日韩一区二区中文| 高清日韩欧美| 欧美91在线| 国产精品videosex极品| 88久久精品| 69堂精品视频在线播放| 亚洲精品乱码日韩| 在线观看亚洲精品福利片| 极品日韩av| 欧美二区视频| 久久精品123| 秋霞影院一区二区三区| 91亚洲自偷观看高清| av资源中文在线天堂| 精品香蕉视频| 国内精品麻豆美女在线播放视频| 国产欧美日韩免费观看| 青青草精品视频| 日本国产欧美| 日韩精品亚洲专区| 日韩激情视频网站| 日韩国产一二三区| 国产色噜噜噜91在线精品 | 日本亚洲视频| 亚洲一区二区三区久久久| 国产精品美女久久久| 丝袜亚洲精品中文字幕一区| 中文精品视频| 综合干狼人综合首页| 伊人久久大香伊蕉在人线观看热v| 蜜桃视频在线观看一区| 亚洲九九精品| 国产精品一国产精品k频道56| 欧美亚洲tv| 嫩呦国产一区二区三区av| 久久精品国内一区二区三区| 精品免费视频| 久久久久国产精品一区三寸| 免费欧美一区| 亚洲精品99| 无码日韩精品一区二区免费| 欧美亚洲综合视频| 激情久久99| 免费欧美一区| 日韩高清一区在线 | 欧美一级全黄| 麻豆91精品视频| 快播电影网址老女人久久| 久久亚洲国产| 日本亚洲欧美天堂免费| 精品国产乱码| 一区在线观看| 国产欧美日韩一级| 久久精品国产免费| 99久久婷婷这里只有精品| 在线一区二区三区视频| 国产精品主播在线观看| 日韩欧美不卡| 深夜福利一区| 亚洲最新无码中文字幕久久| 国产午夜精品一区二区三区欧美| 欧美一区二区三区久久精品| 九九精品调教| 人人精品久久| 蜜桃精品在线| 日韩一区二区三区高清在线观看| 精品国产亚洲一区二区三区大结局| 婷婷成人基地| 日韩av在线免费观看不卡| 国产黄大片在线观看| 美女久久网站| 国产色播av在线| 亚洲精品免费观看| 麻豆视频在线看| 亚洲精品一级| 久久精品青草| 久久久国产精品网站| 蜜臀av在线播放一区二区三区| 国产aa精品| 亚洲综合激情在线| 91看片一区| 国产美女视频一区二区| aa亚洲婷婷| 电影91久久久| 亚洲网址在线观看| 久久高清免费| 精品72久久久久中文字幕| 亚洲人成网77777色在线播放| 日韩av在线播放网址| 日本成人中文字幕在线视频| 91成人网在线观看| 国产精品国产三级国产在线观看| 综合亚洲色图| 欧美日韩国产在线观看网站| 精品成av人一区二区三区| 亚洲日本三级| 五月天综合网站| 久久uomeier| 欧美日韩一区二区高清| 噜噜噜久久亚洲精品国产品小说| 高清不卡一区| 麻豆极品一区二区三区| 亚州av一区| 国产视频一区三区| 欧美不卡高清一区二区三区| 国产精品va| 国产欧美自拍| 久久国产视频网| 日本欧美一区| 日本国产欧美| 亚久久调教视频| 免费人成网站在线观看欧美高清| 国产综合色区在线观看| 国产精品亚洲一区二区在线观看| 一区二区三区四区精品视频| 中文精品视频| 夜夜嗨网站十八久久| 久久久久99|