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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java实现qq聊天(超详细)

發(fā)布時(shí)間:2023/12/10 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现qq聊天(超详细) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java語(yǔ)言實(shí)踐課內(nèi)容:聊天室小程序或QQ

功能要求:
聊天室:使用圖形用戶界面,能實(shí)現(xiàn)一個(gè)聊天室中多人聊天,可以兩人私聊。
QQ:實(shí)現(xiàn)類似QQ登錄、聊天等功能。
注意:有一定等級(jí)。完全照搬別人的代碼,不超過(guò)70分。
提示:使用socket通信
前面是逐步講解,要是想看最終代碼,請(qǐng)直接找到該文章的最下面
//

準(zhǔn)備工作
建立包,類,文件
插入圖片要?jiǎng)?chuàng)建一個(gè)文件夾,文件夾里保存的就是所需要的圖片啦,比如我創(chuàng)建的文件夾為image;
兩個(gè)設(shè)備上進(jìn)行通信,要用到socket通信協(xié)議,即客戶端的內(nèi)容先傳到服務(wù)器,在服務(wù)器上處理,傳回客戶端


image素材文件里存放的圖片
鏈接:https://pan.baidu.com/s/1zns86NC6Qm80xKZHMIRSbA
提取碼:3f6w

//

1.首先我們先建一個(gè)qq登陸界面

成品圖如下:

詳細(xì)代碼及注釋如下

// 客戶端的登陸界面 package com.qq.client.view; //抽象窗口工具包 import javax.swing.*; import java.awt.*; import java.awt.event.*;public class QqClientlLogin extends JFrame{ //JFrame的子類JLabel jup; //定義上部需要的組件 //標(biāo)簽//定義中部需要的組件JPanel jmid ;JLabel jmid_num1,jmid_key1;JTextField jmid_num2; //文本框JPasswordField jmid_key2; //密碼框JCheckBox jmid_rember,jmid_automatic; //復(fù)選框JPanel jdown; //JPanel 面板JButton jdown_1,jdown_2; //定義下部需要的組件public QqClientlLogin() //構(gòu)造方法{//處理上部 jup=new JLabel(new ImageIcon("image/up3.png"));//處理中部jmid=new JPanel(new GridLayout(3,3));//網(wǎng)格布局 3行3列Font font = new Font("宋體", Font.PLAIN, 25); //創(chuàng)建1個(gè)字體實(shí)例jmid_num1=new JLabel("QQ號(hào)碼:",JLabel.CENTER); jmid_key1=new JLabel("QQ密碼:",JLabel.CENTER);jmid_num1.setFont(font); jmid_key1.setFont(font); //字體大小jmid_num2= new JTextField() ; jmid_key2=new JPasswordField();jmid_rember=new JCheckBox("自動(dòng)登錄");jmid_automatic=new JCheckBox("記住密碼");jmid_rember.setFont(font); jmid_automatic.setFont(font); //字體大小jmid_rember.setForeground(Color.blue); //設(shè)置字體顏色jmid_automatic.setForeground(Color.blue);jmid.add(jmid_num1);jmid.add(jmid_num2);jmid.add(jmid_key1);jmid.add(jmid_key2);jmid.add(jmid_rember);jmid.add(jmid_automatic);//處理下部jdown=new JPanel(new FlowLayout()); //流式布局jdown_1=new JButton(new ImageIcon("image/denglu.png"));jdown_2=new JButton(new ImageIcon("image/tuichu.png"));jdown.add(jdown_1);jdown.add(jdown_2);setLocation(300,300); //窗口的位置add(jup,"North"); //放在最北部 add(jmid,"Center"); //放在中間add(jdown,"South"); //放在南部setSize(700,540); //設(shè)置大小 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //結(jié)束窗口所在的應(yīng)用程序 setVisible(true); //可見(jiàn),默認(rèn)是不可見(jiàn)}public static void main(String[] args){QqClientlLogin qqClientlLogin=new QqClientlLogin();} }

//

2.好友列表界面

成品圖如下:

要建立兩個(gè)卡片的轉(zhuǎn)換,即點(diǎn)擊卡片一的"黑名單"轉(zhuǎn)到第二個(gè)卡片界面,點(diǎn)擊第二個(gè)卡片的"我的好友",轉(zhuǎn)到第一個(gè)界面上
此時(shí),就需要?jiǎng)?chuàng)建監(jiān)聽(tīng)器的類,用到ActionListener接口
除此之外,我還建立了鼠標(biāo)監(jiān)聽(tīng)MouseListener接口,當(dāng)鼠標(biāo)停留在好友是,好友編號(hào)變紅,離開(kāi)時(shí)變回黑色,雙擊好友時(shí),可得到該好友的編號(hào)(并進(jìn)入與該好友的聊天界面)
詳細(xì)代碼及注釋如下

//好友列表(也包括黑名單) package com.qq.client.view;import javax.swing.*; import java.awt.*; import java.awt.event.*;public class QqFriendList extends JFrame implements ActionListener,MouseListener { //負(fù)責(zé)創(chuàng)建監(jiān)聽(tīng)器的類, 點(diǎn)擊按鈕觸發(fā)ActionListener事件; 鼠標(biāo)監(jiān)聽(tīng)MouseListener // 第一張卡片(我的好友);JPanel jup1,jmid1,jdown1; //jup1即為總JPanel;JButton jup1_1,jdown1_1;JScrollPane jmid1_1; //滑動(dòng)窗口;//第二張卡片(黑名單);JPanel jup2,jup2_button,jmid2;JButton jup2_1,jup2_2;JScrollPane jmid2_1; //滑動(dòng)窗口;//把整個(gè)JFrame設(shè)置成CardLayout布局CardLayout cl;public QqFriendList (){ Font font = new Font("宋體", Font.PLAIN, 35); //創(chuàng)建字體實(shí)例 //處理第一張卡片(我的好友);jup1=new JPanel(new BorderLayout()); //第一張卡片的總JPane,BorderLayout()布局;jup1_1=new JButton("我的好友");jup1_1.setFont(font); //字體//假設(shè)有50個(gè)好友,具體是服務(wù)器返回的結(jié)果(好友信息存放在服務(wù)器)jmid1=new JPanel(new GridLayout(50,1,4,4)); //(4,4)行間距和列間距//給jmid1初始化50個(gè)好友JLabel []jlist1=new JLabel [50]; //數(shù)組;for ( int i=0; i<jlist1.length ; i++ ){jlist1[i]=new JLabel(i+1+" ",new ImageIcon("image/touxiang.png"),JLabel.LEFT);jlist1[i].addMouseListener(this);jmid1.add(jlist1[i]); }jmid1_1=new JScrollPane(jmid1);jdown1_1=new JButton("黑名單");jdown1_1.addActionListener(this); //給jdown1_1按鈕增加一個(gè)監(jiān)聽(tīng)器,這個(gè)監(jiān)聽(tīng)器對(duì)象就是“QqFriendList ”類型的,//當(dāng)用戶點(diǎn)擊了jdown1_1按鈕時(shí),會(huì)程序自動(dòng)前往QqFriendList類的“actionPerformed”方法中,處理產(chǎn)生的事件。jdown1_1.setFont(font); //字體jdown1=new JPanel(new GridLayout(1,1));//黑名單按鈕jdown1.add(jdown1_1); //加入按鈕;jup1.add(jup1_1,"North");jup1.add(jmid1_1,"Center");jup1.add(jdown1,"South");//處理第二張卡片(黑名單) jup2=new JPanel(new BorderLayout()); //第二張卡片的總JPane,BorderLayout()布局;jup2_1=new JButton("我的好友");jup2_1.addActionListener(this); //監(jiān)聽(tīng)jup2_2=new JButton("黑名單");jup2_1.setFont(font); //字體jup2_2.setFont(font);jup2_button=new JPanel(new GridLayout(2,1));//黑名單按鈕jup2_button.add(jup2_1);jup2_button.add(jup2_2);//假設(shè)有20個(gè)黑名單,具體是服務(wù)器返回的結(jié)果(好友信息存放在服務(wù)器)jmid2=new JPanel(new GridLayout(20,1,4,4)); //(4,4)行間距和列間距//給jmid2初始化20個(gè)好友JLabel []jlist2=new JLabel [20]; //數(shù)組;for ( int i=0; i<jlist2.length ; i++ ){jlist2[i]=new JLabel(i+1+" ",new ImageIcon("image/heitou.png"),JLabel.LEFT);jmid2.add(jlist2[i]);}jmid2_1=new JScrollPane(jmid2);jup2.add(jup2_button,"North");jup2.add(jmid2_1); cl=new CardLayout();setLayout(cl);add(jup1,"1"); //第一張卡片jup1;add(jup2,"2"); //第二張卡片jup2;setLocation(300,300); //窗口的位置setSize(440,800);setVisible(true); }public static void main(String[] args) {// TODO Auto-generated method stubQqFriendList qqFriendList=new QqFriendList();}public void actionPerformed(ActionEvent arg0){ //如果點(diǎn)擊了黑名單按鈕,就顯示第二張卡片if(arg0.getSource()==jdown1_1){cl.show(this.getContentPane(), "2"); //用getContentPane()方法獲得JFrame的內(nèi)容面板}elseif(arg0.getSource()==jup2_1){cl.show(this.getContentPane(), "1");}}public void mouseEntered(MouseEvent arg0) { //進(jìn)入組件觸發(fā)鼠標(biāo)事件// TODO Auto-generated method stubJLabel jl=(JLabel)arg0.getSource(); //變成JLable形式//getSource()獲取鼠標(biāo)事件的事件源;jl.setForeground(Color.red); //設(shè)置前景色}public void mouseExited(MouseEvent arg0) { //鼠標(biāo)離開(kāi)組件觸發(fā)的鼠標(biāo)事件// TODO Auto-generated method stubJLabel jl=(JLabel)arg0.getSource(); jl.setForeground(Color.black);}public void mouseClicked(MouseEvent arg0) { //點(diǎn)擊鼠標(biāo)觸發(fā)鼠的標(biāo)事件// TODO Auto-generated method stub//響應(yīng)用戶雙擊的事件,并得到好友的編號(hào).if(arg0.getClickCount()==2) //getClickCount() 獲取鼠標(biāo)被單機(jī)的次數(shù){//得到該好友的編號(hào) //getText() 的意思是:返回?cái)?shù)據(jù)窗口控件中 懸浮在當(dāng)前行列之上的String friendNum=((JLabel)arg0.getSource()).getText();//System.out.println("你希望和 "+friendNum+" 聊天");}}public void mousePressed(MouseEvent arg0) { //按下按鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件// TODO Auto-generated method stub}public void mouseReleased(MouseEvent arg0) { //釋放鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件// TODO Auto-generated method stub}}

3.聊天界面,用服務(wù)器判斷登錄qq,對(duì)象流

這部分的代碼成果圖:

注:正常是要有數(shù)據(jù)庫(kù)來(lái)存qq賬號(hào)密碼信息的,秉著由簡(jiǎn)至難的原則,此處先不設(shè)計(jì)數(shù)據(jù)庫(kù),直接用服務(wù)器判斷
有了上訴兩個(gè)界面的設(shè)置,相信設(shè)置聊天界面應(yīng)該很好模擬退出
聊天界面初步成果:

//與好友聊天的界面 package com.qq.client.view; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class QqChat extends JFrame {Font font = new Font("宋體", Font.PLAIN, 20); JTextArea jta; //文本域 存聊天內(nèi)容JTextField jtf; //文本框JButton jb;JPanel jp;String ownerId;String friendId;public QqChat(String owner,String friend){jta=new JTextArea();jtf=new JTextField(25); //25個(gè)字符那么寬jb=new JButton("發(fā)送");jb.setFont(font);jp=new JPanel();jp.add(jtf);jp.add(jb); add(jta,"Center");add(jp,"South");setTitle(owner+"正在和 "+friend+" 聊天"); //設(shè)置標(biāo)題setIconImage((new ImageIcon("image/qq.png").getImage())); //獲取圖像setLocation(800,400); //窗口的位置setSize(600, 500);setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubQqChat qqChat=new QqChat("1"); //傳入好友1,你正在和1聊天;}

思考一下,如果是要與其余好友聊天應(yīng)該如何表示呢?
在 QqFriendList中,我們雙擊得到好友的編號(hào),只需把編號(hào)傳到QqChat中即可

現(xiàn)在來(lái)實(shí)現(xiàn)登錄操作:當(dāng)用戶點(diǎn)擊登錄后,把qq號(hào)碼和密碼發(fā)送給QqServer(服務(wù)器)去驗(yàn)證,如果該用戶合法,返回true,否則返回false;
以對(duì)象流的方式讀取客戶端發(fā)來(lái)的賬號(hào)和密碼,在網(wǎng)絡(luò)間傳遞對(duì)象流,
避免直接讀入由特殊符號(hào),空格,換行等干擾

對(duì)象流是一種高級(jí)流,可以方便我們將java中的任何對(duì)象進(jìn)行讀寫(xiě)操作。 java.io.objectoutputstream對(duì)象輸出流,可以將對(duì)象轉(zhuǎn)換為一組字節(jié)寫(xiě)出。 java.io.objectinputstream對(duì)象輸入流,可以讀取一組字節(jié)轉(zhuǎn)換為原對(duì)象, 還原為原對(duì)象的條件是讀取這個(gè)字節(jié)應(yīng)該是對(duì)象輸出流將一個(gè)對(duì)象轉(zhuǎn)換的字節(jié)。一個(gè)對(duì)象要想序列化,該類必須實(shí)現(xiàn)java.io.Serializable 接口 Serializable 是一個(gè)標(biāo)記接口,不實(shí)現(xiàn)此接口的類將不會(huì)使任何狀態(tài)序列化或反序列化,會(huì)拋出NotSerializableException 。 使用ObjectOutputStream對(duì)象中的方法writeObject,把對(duì)象寫(xiě)入到文件中

在這里,我們還要用到socket socket是兩臺(tái)主機(jī)之間的一個(gè)連接
網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket。
建立網(wǎng)絡(luò)通信連接需要一對(duì)socket,兩個(gè)socket之間形成一個(gè)管道(通道),進(jìn)行信息流的傳輸(聯(lián)想IO流中文件和程序之間讀寫(xiě))。

ServerSocket與Socket入門(mén)詳解
分別在Qqclient(客戶端)和QqServe(服務(wù)端)項(xiàng)目里建立com.qq.common包,包里存放Message.java和User.java兩個(gè)類
User類就是獲得用戶輸入的賬號(hào)和密碼

//用戶信息類 package com.qq.common;public class User implements java.io.Serializable{private String userId;private String passwd;public String getUserId(){return userId;}public void setUserId(String userId) {this.userId = userId;}public String getPasswd(){return passwd;}public void setPasswd(String passwd){this.passwd=passwd;} }

對(duì)發(fā)送服務(wù)端的信息規(guī)定一些規(guī)則
mesType為true 表明登陸成功
mesType為false 表明登錄失敗
所以Message就是用來(lái)判斷的

package com.qq.common; public class Message implements java.io.Serializable { //序列化 private String mesType;public String getMesType(){return mesType;}public void setMesType(String mesType){this.mesType =mesType;} }

主要思想

要在第一部分qq登錄界面的代碼中加上監(jiān)聽(tīng)(登錄按鈕),將得到的賬戶和密碼信息逐步傳入到破服務(wù)器里面,再有服務(wù)器返回,判斷是否能登錄,如果能,打開(kāi)好友列表界面,
否則,觸發(fā)提示框"用戶名或密碼錯(cuò)誤".
客戶端
注意:我判斷的是如果密碼為"123456"即為正確

// 客戶端的登陸界面 package com.qq.client.view; //抽象窗口工具包 import javax.swing.*; import java.awt.*; import java.awt.event.*; import com.qq.client.model.*; import com.qq.common.*; public class QqClientlLogin extends JFrame implements ActionListener{ //JFrame的子類JLabel jup; //定義上部需要的組件 //標(biāo)簽//定義中部需要的組件JPanel jmid ;JLabel jmid_num1,jmid_key1;JTextField jmid_num2; //文本框JPasswordField jmid_key2; //密碼框JCheckBox jmid_rember,jmid_automatic; //復(fù)選框JPanel jdown; //JPanel 面板JButton jdown_1,jdown_2; //定義下部需要的組件public QqClientlLogin() //構(gòu)造方法{//處理上部 jup=new JLabel(new ImageIcon("image/up3.png"));//處理中部jmid=new JPanel(new GridLayout(3,3));//網(wǎng)格布局 3行3列Font font = new Font("宋體", Font.PLAIN, 25); //創(chuàng)建1個(gè)字體實(shí)例jmid_num1=new JLabel("QQ號(hào)碼:",JLabel.CENTER); jmid_key1=new JLabel("QQ密碼:",JLabel.CENTER);jmid_num1.setFont(font); jmid_key1.setFont(font); //字體大小jmid_num2= new JTextField() ; jmid_key2=new JPasswordField();jmid_rember=new JCheckBox("自動(dòng)登錄");jmid_automatic=new JCheckBox("記住密碼");jmid_rember.setFont(font); jmid_automatic.setFont(font); //字體大小jmid_rember.setForeground(Color.blue); //設(shè)置字體顏色jmid_automatic.setForeground(Color.blue);jmid.add(jmid_num1);jmid.add(jmid_num2);jmid.add(jmid_key1);jmid.add(jmid_key2);jmid.add(jmid_rember);jmid.add(jmid_automatic);//處理下部jdown=new JPanel(new FlowLayout()); //流式布局jdown_1=new JButton(new ImageIcon("image/denglu.png"));//響應(yīng)用戶點(diǎn)擊登錄jdown_1.addActionListener(this); //監(jiān)控jdown_2=new JButton(new ImageIcon("image/tuichu.png"));jdown.add(jdown_1);jdown.add(jdown_2);setLocation(300,300); //窗口的位置add(jup,"North"); //放在最北部 add(jmid,"Center"); //放在中間add(jdown,"South"); //放在南部setSize(700,540); //設(shè)置大小 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //結(jié)束窗口所在的應(yīng)用程序 setVisible(true); //可見(jiàn),默認(rèn)是不可見(jiàn)}public static void main(String[] args){QqClientlLogin qqClientlLogin=new QqClientlLogin();} public void actionPerformed(ActionEvent arg0){if(arg0.getSource()==jdown_1); //請(qǐng)求登錄{User u=new User();u. setUserId(jmid_num2.getText().trim()); //trim() 方法用于 刪除字符串的頭尾空白符u. setPasswd(new String (jmid_key2.getPassword())); //字符串;QqClientUser qqclientuser=new QqClientUser();if(qqclientuser.checkUser(u)){new QqFriendList(u.getUserId()); //好友列表this.dispose(); //關(guān)閉登陸界面}else{JOptionPane.showMessageDialog(this,"用戶名或密碼錯(cuò)誤");//JOptionPane彈窗,消息提示框//showMessageDialog這個(gè)方法里有兩個(gè)參數(shù)//第一個(gè)參數(shù)-確定Frame在其中顯示的對(duì)話框//第二個(gè)參數(shù)message就是我們要在提示框里顯示的信息}}} } //好友列表(也包括黑名單) package com.qq.client.view;import javax.swing.*; import java.awt.*; import java.awt.event.*;public class QqFriendList extends JFrame implements ActionListener,MouseListener { //負(fù)責(zé)創(chuàng)建監(jiān)聽(tīng)器的類, 點(diǎn)擊按鈕觸發(fā)ActionListener事件; 鼠標(biāo)監(jiān)聽(tīng)MouseListener String owner; // 第一張卡片(我的好友);JPanel jup1,jmid1,jdown1; //jup1即為總JPanel;JButton jup1_1,jdown1_1;JScrollPane jmid1_1; //滑動(dòng)窗口;//第二張卡片(黑名單);JPanel jup2,jup2_button,jmid2;JButton jup2_1,jup2_2;JScrollPane jmid2_1; //滑動(dòng)窗口;//把整個(gè)JFrame設(shè)置成CardLayout布局CardLayout cl;public QqFriendList (String ownerId){ Font font = new Font("宋體", Font.PLAIN, 35); //創(chuàng)建字體實(shí)例 owner=ownerId;//處理第一張卡片(我的好友);jup1=new JPanel(new BorderLayout()); //第一張卡片的總JPane,BorderLayout()布局;jup1_1=new JButton("我的好友");jup1_1.setFont(font); //字體//假設(shè)有50個(gè)好友,具體是服務(wù)器返回的結(jié)果(好友信息存放在服務(wù)器)jmid1=new JPanel(new GridLayout(50,1,4,4)); //(4,4)行間距和列間距//給jmid1初始化50個(gè)好友JLabel []jlist1=new JLabel [50]; //數(shù)組;for ( int i=0; i<jlist1.length ; i++ ){jlist1[i]=new JLabel(i+1+"",new ImageIcon("image/touxiang.png"),JLabel.LEFT);jlist1[i].addMouseListener(this);jmid1.add(jlist1[i]); }jmid1_1=new JScrollPane(jmid1);jdown1_1=new JButton("黑名單");jdown1_1.addActionListener(this); //給jdown1_1按鈕增加一個(gè)監(jiān)聽(tīng)器,這個(gè)監(jiān)聽(tīng)器對(duì)象就是“QqFriendList ”類型的,//當(dāng)用戶點(diǎn)擊了jdown1_1按鈕時(shí),會(huì)程序自動(dòng)前往QqFriendList類的“actionPerformed”方法中,處理產(chǎn)生的事件。jdown1_1.setFont(font); //字體jdown1=new JPanel(new GridLayout(1,1));//黑名單按鈕jdown1.add(jdown1_1); //加入按鈕;jup1.add(jup1_1,"North");jup1.add(jmid1_1,"Center");jup1.add(jdown1,"South");//處理第二張卡片(黑名單) jup2=new JPanel(new BorderLayout()); //第二張卡片的總JPane,BorderLayout()布局;jup2_1=new JButton("我的好友");jup2_1.addActionListener(this); //監(jiān)聽(tīng)jup2_2=new JButton("黑名單");jup2_1.setFont(font); //字體jup2_2.setFont(font);jup2_button=new JPanel(new GridLayout(2,1));//黑名單按鈕jup2_button.add(jup2_1);jup2_button.add(jup2_2);//假設(shè)有20個(gè)黑名單,具體是服務(wù)器返回的結(jié)果(好友信息存放在服務(wù)器)jmid2=new JPanel(new GridLayout(20,1,4,4)); //(4,4)行間距和列間距//給jmid2初始化20個(gè)好友JLabel []jlist2=new JLabel [20]; //數(shù)組;for ( int i=0; i<jlist2.length ; i++ ){jlist2[i]=new JLabel(i+1+" ",new ImageIcon("image/heitou.png"),JLabel.LEFT);jmid2.add(jlist2[i]);}jmid2_1=new JScrollPane(jmid2);jup2.add(jup2_button,"North");jup2.add(jmid2_1); cl=new CardLayout();setLayout(cl);add(jup1,"1"); //第一張卡片jup1;add(jup2,"2"); //第二張卡片jup2;setTitle(ownerId);//顯示自己的編號(hào)setLocation(300,300); //窗口的位置setSize(440,800);setVisible(true); }public static void main(String[] args) {// TODO Auto-generated method stubQqFriendList qqFriendList=new QqFriendList();}public void actionPerformed(ActionEvent arg0){ //如果點(diǎn)擊了黑名單按鈕,就顯示第二張卡片if(arg0.getSource()==jdown1_1){cl.show(this.getContentPane(), "2"); //用getContentPane()方法獲得JFrame的內(nèi)容面板}elseif(arg0.getSource()==jup2_1){cl.show(this.getContentPane(), "1");}}public void mouseEntered(MouseEvent arg0) { //進(jìn)入組件觸發(fā)鼠標(biāo)事件// TODO Auto-generated method stubJLabel jl=(JLabel)arg0.getSource(); //變成JLable形式//getSource()獲取鼠標(biāo)事件的事件源;jl.setForeground(Color.red); //設(shè)置前景色}public void mouseExited(MouseEvent arg0) { //鼠標(biāo)離開(kāi)組件觸發(fā)的鼠標(biāo)事件// TODO Auto-generated method stubJLabel jl=(JLabel)arg0.getSource(); jl.setForeground(Color.black);}public void mouseClicked(MouseEvent arg0) { //點(diǎn)擊鼠標(biāo)觸發(fā)鼠的標(biāo)事件// TODO Auto-generated method stub//響應(yīng)用戶雙擊的事件,并得到好友的編號(hào).if(arg0.getClickCount()==2) //getClickCount() 獲取鼠標(biāo)被單機(jī)的次數(shù){//得到該好友的編號(hào) //getText() 的意思是:返回?cái)?shù)據(jù)窗口控件中 懸浮在當(dāng)前行列之上的String friendNum=((JLabel)arg0.getSource()).getText();//System.out.println("你希望和 "+friendNum+" 聊天");new QqChat(owner,friendNum); //傳入編號(hào)}}public void mousePressed(MouseEvent arg0) { //按下按鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件// TODO Auto-generated method stub}public void mouseReleased(MouseEvent arg0) { //釋放鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件// TODO Auto-generated method stub } } package com.qq.client.model; import com.qq.common.*; public class QqClientUser {public boolean checkUser(User u){return new QqClientConServer().sendLoginInfotoSSErver(u);} } //客戶端鏈接服務(wù)器的部分 package com.qq.client.model;import java.util.*; import java.net.*; import java.io.*; import com.qq.common.*; public class QqClientConServer{//發(fā)送第一次請(qǐng)求,登錄請(qǐng)求public boolean sendLoginInfotoSSErver(Object o) //發(fā)送對(duì)象到服務(wù)器{ boolean b=false;try{ Socket s=new Socket("127.0.0.1",9999); //傳入要連接主機(jī)與端口ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); //輸出流oos.writeObject(o); //把o發(fā)出去ObjectInputStream ois=new ObjectInputStream(s.getInputStream());Message ms=(Message)ois.readObject(); if(ms.getMesType().equals("1"))b=true;}catch (Exception e){e.printStackTrace();}finally{}return b;} }

服務(wù)端
除了需要的Message.java和User.java兩個(gè)類還需要

//服務(wù)器端控制界面,可以完成啟動(dòng)服務(wù)器,關(guān)閉服務(wù)器,可以管理和監(jiān)控用戶 package com.qq.server.view;import javax.swing.*; import java.awt.*; import java.awt.event.*; import com.qq.server.model.MyQqServer; public class ControlPanel extends JFrame implements ActionListener{JPanel jp1;JButton jstart,jend;public ControlPanel(){ Font font = new Font("宋體",Font.PLAIN,30);jp1=new JPanel();jstart=new JButton("啟動(dòng)服務(wù)器");jstart.addActionListener(this);jend=new JButton("關(guān)閉服務(wù)器");jstart.setFont(font); jend.setFont(font);jstart.setForeground(Color.BLUE); jend.setForeground(Color.BLUE);jp1.add(jstart);jp1.add(jend);add(jp1);setLocation(150,150);setSize(900,900);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //結(jié)束窗口所在的應(yīng)用程序 setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubControlPanel controlpanel =new ControlPanel();}public void actionPerformed(ActionEvent arg0){if(arg0.getSource()==jstart){new MyQqServer();}} } //qq服務(wù)器,監(jiān)聽(tīng),等待某個(gè)qq客戶端鏈接 package com.qq.server.model;import java.io.*; //(I/O)流庫(kù),提供大量的流類 import java.net.*;//導(dǎo)入網(wǎng)絡(luò)包 import java.util.*; //實(shí)用工具類,提供了一些實(shí)用的方法和數(shù)據(jù)結(jié)構(gòu) import com.qq.common.*;public class MyQqServer {public MyQqServer (){//try-catch語(yǔ)句處理異常try{ //ServerSocket類表示服務(wù)器socket//在9999監(jiān)聽(tīng)System.out.println("服務(wù)器正在9999監(jiān)聽(tīng)");//簡(jiǎn)單判斷一下是否啟動(dòng)服務(wù)端ServerSocket ss=new ServerSocket(9999);while(true) //服務(wù)器可多次監(jiān)聽(tīng){Socket s=ss.accept() ; //阻塞,等待連接(與客戶端)//接收客戶端發(fā)來(lái)的信息ObjectInputStream ois=new ObjectInputStream(s.getInputStream());User u=(User)ois.readObject();System.out.println("用戶Id:"+u.getUserId()+" 密碼"+u.getPasswd()); Message m=new Message();ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());if(u.getPasswd().equals("123456")){//返回一個(gè)成功登錄的信息m.setMesType("1"); //mesType1 =1 表明登陸成功oos.writeObject(m); }else{m.setMesType("2"); oos.writeObject(m); s.close(); //關(guān)閉連接(流)}}}catch(Exception e){e.printStackTrace();//將錯(cuò)誤信息全部打印}finally{}} }

4.一對(duì)一的聊天

進(jìn)程概念:進(jìn)程是代碼在數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位。
線程概念:線程是進(jìn)程的一個(gè)執(zhí)行路徑,一個(gè)進(jìn)程中至少有一個(gè)線程,進(jìn)程中的多個(gè)線程共享進(jìn)程的資源。

此處要用線程用來(lái)接收客戶端的消息,因?yàn)椴粌H僅一個(gè)用戶(可實(shí)現(xiàn)多用戶登錄)
要在message類里面加入,用戶編號(hào),接受方,發(fā)送信息(即獲得聊天界面文本框的內(nèi)容)等
在chat類里面,加入讀取,文本域中顯示聊天代碼等內(nèi)容
在管理客戶端線程中使用HashMap<關(guān)鍵字,值>記錄發(fā)送者與服務(wù)器的socket,關(guān)鍵字記錄用戶編號(hào),值記錄socket

每個(gè)包(類)或多或少都有所更改,完整代碼如下,希望對(duì)大家有所幫助,同時(shí)請(qǐng)大佬指正錯(cuò)誤%%%

//
客戶端代碼

package com.qq.common;public class Message implements java.io.Serializable { //序列化private String mesType;private String sender;//發(fā)送者private String getter; //接收者private String con; //信息public String getSender(){return sender;}public void setSender(String sender){this.sender=sender;}public String getGetter(){return getter;}public void setGetter(String getter){this.getter=getter;}public String getCon(){return con;}public void setCon(String con){this.con=con;}public String getMesType(){return mesType;}public void setMesType(String mesType){this.mesType =mesType;} } //用戶信息類 package com.qq.common;public class User implements java.io.Serializable{private String userId;private String passwd;public String getUserId(){return userId;}public void setUserId(String userId) {this.userId = userId;}public String getPasswd(){return passwd;}public void setPasswd(String passwd){this.passwd=passwd;}} // 客戶端的登陸界面 package com.qq.client.view; //抽象窗口工具包 import javax.swing.*; import java.awt.*; import java.awt.event.*; import com.qq.client.model.*; import com.qq.common.*; public class QqClientlLogin extends JFrame implements ActionListener{ //JFrame的子類JLabel jup; //定義上部需要的組件 //標(biāo)簽//定義中部需要的組件JPanel jmid ;JLabel jmid_num1,jmid_key1;JTextField jmid_num2; //文本框JPasswordField jmid_key2; //密碼框JCheckBox jmid_rember,jmid_automatic; //復(fù)選框JPanel jdown; //JPanel 面板JButton jdown_1,jdown_2; //定義下部需要的組件public QqClientlLogin() //構(gòu)造方法{//處理上部 jup=new JLabel(new ImageIcon("image/up3.png"));//處理中部jmid=new JPanel(new GridLayout(3,3));//網(wǎng)格布局 3行3列Font font = new Font("宋體", Font.PLAIN, 25); //創(chuàng)建1個(gè)字體實(shí)例jmid_num1=new JLabel("QQ號(hào)碼:",JLabel.CENTER); jmid_key1=new JLabel("QQ密碼:",JLabel.CENTER);jmid_num1.setFont(font); jmid_key1.setFont(font); //字體大小jmid_num2= new JTextField() ; jmid_key2=new JPasswordField();jmid_rember=new JCheckBox("自動(dòng)登錄");jmid_automatic=new JCheckBox("記住密碼");jmid_rember.setFont(font); jmid_automatic.setFont(font); //字體大小jmid_rember.setForeground(Color.blue); //設(shè)置字體顏色jmid_automatic.setForeground(Color.blue);jmid.add(jmid_num1);jmid.add(jmid_num2);jmid.add(jmid_key1);jmid.add(jmid_key2);jmid.add(jmid_rember);jmid.add(jmid_automatic);//處理下部jdown=new JPanel(new FlowLayout()); //流式布局jdown_1=new JButton(new ImageIcon("image/denglu.png"));//響應(yīng)用戶點(diǎn)擊登錄jdown_1.addActionListener(this); //監(jiān)控jdown_2=new JButton(new ImageIcon("image/tuichu.png"));jdown.add(jdown_1);jdown.add(jdown_2);setLocation(300,300); //窗口的位置add(jup,"North"); //放在最北部 add(jmid,"Center"); //放在中間add(jdown,"South"); //放在南部setSize(700,540); //設(shè)置大小 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //結(jié)束窗口所在的應(yīng)用程序 setVisible(true); //可見(jiàn),默認(rèn)是不可見(jiàn)}public static void main(String[] args){QqClientlLogin qqClientlLogin=new QqClientlLogin();} public void actionPerformed(ActionEvent arg0){if(arg0.getSource()==jdown_1); //請(qǐng)求登錄{User u=new User();u. setUserId(jmid_num2.getText().trim()); //trim() 方法用于 刪除字符串的頭尾空白符u. setPasswd(new String (jmid_key2.getPassword())); //字符串;QqClientUser qqclientuser=new QqClientUser();if(qqclientuser.checkUser(u)){QqFriendList qqList=new QqFriendList(u.getUserId()); //好友列表this.dispose(); //關(guān)閉登陸界面}else{JOptionPane.showMessageDialog(this,"用戶名或密碼錯(cuò)誤");//JOptionPane彈窗,消息提示框//showMessageDialog這個(gè)方法里有兩個(gè)參數(shù)//第一個(gè)參數(shù)-確定Frame在其中顯示的對(duì)話框//第二個(gè)參數(shù)message就是我們要在提示框里顯示的信息}}} } //好友列表(也包括黑名單) package com.qq.client.view;import javax.swing.*; import java.awt.*; import java.awt.event.*;public class QqFriendList extends JFrame implements ActionListener,MouseListener { //負(fù)責(zé)創(chuàng)建監(jiān)聽(tīng)器的類, 點(diǎn)擊按鈕觸發(fā)ActionListener事件; 鼠標(biāo)監(jiān)聽(tīng)MouseListener String owner; // 第一張卡片(我的好友);JPanel jup1,jmid1,jdown1; //jup1即為總JPanel;JButton jup1_1,jdown1_1;JScrollPane jmid1_1; //滑動(dòng)窗口;//第二張卡片(黑名單);JPanel jup2,jup2_button,jmid2;JButton jup2_1,jup2_2;JScrollPane jmid2_1; //滑動(dòng)窗口;//把整個(gè)JFrame設(shè)置成CardLayout布局CardLayout cl;public QqFriendList (String ownerId){ Font font = new Font("宋體", Font.PLAIN, 35); //創(chuàng)建字體實(shí)例 owner=ownerId;//處理第一張卡片(我的好友);jup1=new JPanel(new BorderLayout()); //第一張卡片的總JPane,BorderLayout()布局;jup1_1=new JButton("我的好友");jup1_1.setFont(font); //字體//假設(shè)有50個(gè)好友,具體是服務(wù)器返回的結(jié)果(好友信息存放在服務(wù)器)jmid1=new JPanel(new GridLayout(50,1,4,4)); //(4,4)行間距和列間距//給jmid1初始化50個(gè)好友JLabel []jlist1=new JLabel [50]; //數(shù)組;for ( int i=0; i<jlist1.length ; i++ ){jlist1[i]=new JLabel(i+1+" ",new ImageIcon("image/touxiang.png"),JLabel.LEFT);jlist1[i].addMouseListener(this);jmid1.add(jlist1[i]); }jmid1_1=new JScrollPane(jmid1);jdown1_1=new JButton("黑名單");jdown1_1.addActionListener(this); //給jdown1_1按鈕增加一個(gè)監(jiān)聽(tīng)器,這個(gè)監(jiān)聽(tīng)器對(duì)象就是“QqFriendList ”類型的,//當(dāng)用戶點(diǎn)擊了jdown1_1按鈕時(shí),會(huì)程序自動(dòng)前往QqFriendList類的“actionPerformed”方法中,處理產(chǎn)生的事件。jdown1_1.setFont(font); //字體jdown1=new JPanel(new GridLayout(1,1));//黑名單按鈕jdown1.add(jdown1_1); //加入按鈕;jup1.add(jup1_1,"North");jup1.add(jmid1_1,"Center");jup1.add(jdown1,"South");//處理第二張卡片(黑名單) jup2=new JPanel(new BorderLayout()); //第二張卡片的總JPane,BorderLayout()布局;jup2_1=new JButton("我的好友");jup2_1.addActionListener(this); //監(jiān)聽(tīng)jup2_2=new JButton("黑名單");jup2_1.setFont(font); //字體jup2_2.setFont(font);jup2_button=new JPanel(new GridLayout(2,1));//黑名單按鈕jup2_button.add(jup2_1);jup2_button.add(jup2_2);//假設(shè)有20個(gè)黑名單,具體是服務(wù)器返回的結(jié)果(好友信息存放在服務(wù)器)jmid2=new JPanel(new GridLayout(20,1,4,4)); //(4,4)行間距和列間距//給jmid2初始化20個(gè)好友JLabel []jlist2=new JLabel [20]; //數(shù)組;for ( int i=0; i<jlist2.length ; i++ ){jlist2[i]=new JLabel(i+1+" ",new ImageIcon("image/heitou.png"),JLabel.LEFT);jmid2.add(jlist2[i]);}jmid2_1=new JScrollPane(jmid2);jup2.add(jup2_button,"North");jup2.add(jmid2_1); cl=new CardLayout();setLayout(cl);add(jup1,"1"); //第一張卡片jup1;add(jup2,"2"); //第二張卡片jup2;setTitle(ownerId);//顯示自己的編號(hào)setLocation(300,300); //窗口的位置setSize(440,800);setVisible(true); }public static void main(String[] args) {// TODO Auto-generated method stub//QqFriendList qqFriendList=new QqFriendList();} public void actionPerformed(ActionEvent arg0){ //如果點(diǎn)擊了黑名單按鈕,就顯示第二張卡片if(arg0.getSource()==jdown1_1){cl.show(this.getContentPane(), "2"); //用getContentPane()方法獲得JFrame的內(nèi)容面板}elseif(arg0.getSource()==jup2_1){cl.show(this.getContentPane(), "1");}}public void mouseEntered(MouseEvent arg0) { //進(jìn)入組件觸發(fā)鼠標(biāo)事件// TODO Auto-generated method stubJLabel jl=(JLabel)arg0.getSource(); //變成JLable形式//getSource()獲取鼠標(biāo)事件的事件源;jl.setForeground(Color.red); //設(shè)置前景色}public void mouseExited(MouseEvent arg0) { //鼠標(biāo)離開(kāi)組件觸發(fā)的鼠標(biāo)事件// TODO Auto-generated method stubJLabel jl=(JLabel)arg0.getSource(); jl.setForeground(Color.black);}public void mouseClicked(MouseEvent arg0) { //點(diǎn)擊鼠標(biāo)觸發(fā)鼠的標(biāo)事件// TODO Auto-generated method stub//響應(yīng)用戶雙擊的事件,并得到好友的編號(hào).if(arg0.getClickCount()==2) //getClickCount() 獲取鼠標(biāo)被單機(jī)的次數(shù){//得到該好友的編號(hào) //getText() 的意思是:返回?cái)?shù)據(jù)窗口控件中 懸浮在當(dāng)前行列之上的String friendNum=((JLabel)arg0.getSource()).getText();//System.out.println("你希望和 "+friendNum+" 聊天");QqChat qqChat=new QqChat(owner,friendNum); //傳入編號(hào)Thread t=new Thread(qqChat); t.start(); // 啟動(dòng)線程}}public void mousePressed(MouseEvent arg0) { //按下按鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件// TODO Auto-generated method stub}public void mouseReleased(MouseEvent arg0) { //釋放鼠標(biāo)鍵觸發(fā)的鼠標(biāo)事件// TODO Auto-generated method stub } } //與好友聊天的界面//因?yàn)榭蛻舳?#xff0c;要處于讀取的狀態(tài),因此我們把它做成一個(gè)線程 package com.qq.client.view; import javax.swing.*; import java.awt.*; import java.io.*; import java.awt.event.*; import com.qq.common.*; import com.qq.client.model.*; public class QqChat extends JFrame implements ActionListener,Runnable{ //監(jiān)聽(tīng)發(fā)送按鈕Font font = new Font("宋體", Font.PLAIN, 20); //實(shí)現(xiàn)Runnable接口實(shí)現(xiàn)多線程,JTextArea jta; //文本域 存聊天內(nèi)容JTextField jtf; //文本框JButton jb;JPanel jp;String ownerId;String friendId;public QqChat(String owner,String friend){ ownerId= owner;friendId=friend;jta=new JTextArea();jtf=new JTextField(25); //25個(gè)字符那么寬jb=new JButton("發(fā)送");jb.addActionListener(this);jb.setFont(font);jp=new JPanel();jp.add(jtf);jp.add(jb); add(jta,"Center");add(jp,"South");setTitle(owner+"正在和 "+friend+" 聊天"); //設(shè)置標(biāo)題setIconImage((new ImageIcon("image/qq.png").getImage())); //獲取圖像setLocation(800,400); //窗口的位置setSize(600, 500);setVisible(true);}//寫(xiě)一個(gè)方法,讓它顯示消息public void showMessage(Message m){String info=m.getSender()+" 給"+m.getGetter()+" 發(fā)送:"+m.getCon()+"\r\n";this.jta.append(info);}public void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubif(arg0.getSource()==jb)//如果用戶點(diǎn)擊了發(fā)送按鈕{Message m=new Message();m.setSender(this.ownerId);m.setGetter(this.friendId);m.setCon(jtf.getText()); //文本框中得到 //發(fā)送給服務(wù)器 要拿到socket,可以把socket寫(xiě)成靜態(tài)的,從類里面拿出來(lái);try { ObjectOutputStream oos=new ObjectOutputStream(QqClientConServer.s.getOutputStream());oos.writeObject(m);} catch (Exception e) {e.printStackTrace();} } }public void run(){while(true){ //一直處于讀取狀態(tài)(如果讀不到就等待)try{ObjectInputStream ois=new ObjectInputStream(QqClientConServer.s.getInputStream());Message m =(Message)ois.readObject(); //顯示String info=m.getSender()+"給"+m.getGetter()+"發(fā)送"+m.getCon()+"\r\n";this.jta.append(info); //(添加)追加到文本域}catch(Exception e){e.printStackTrace();}}} } package com.qq.client.model; import com.qq.common.*; public class QqClientUser {public boolean checkUser(User u){return new QqClientConServer().sendLoginInfotoSSErver(u);} } //客戶端鏈接服務(wù)器的部分 package com.qq.client.model;import java.util.*; import java.net.*; import java.io.*; import com.qq.common.*; public class QqClientConServer{public static Socket s;//發(fā)送第一次請(qǐng)求,登錄請(qǐng)求public boolean sendLoginInfotoSSErver(Object o) //發(fā)送對(duì)象到服務(wù)器{ boolean b=false;try{ s=new Socket("127.0.0.1",9999); //傳入要連接主機(jī)與端口ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); //輸出流oos.writeObject(o); //把o發(fā)出去ObjectInputStream ois=new ObjectInputStream(s.getInputStream());Message ms=(Message)ois.readObject(); if(ms.getMesType().equals("1"))b=true;}catch (Exception e){e.printStackTrace();}finally{}return b;} }

服務(wù)端代碼(message,user與客戶端一樣,這里不在寫(xiě)出,直接復(fù)制過(guò)去就可以)

//服務(wù)器端控制界面,可以完成啟動(dòng)服務(wù)器,關(guān)閉服務(wù)器,可以管理和監(jiān)控用戶 package com.qq.server.view;import javax.swing.*; import java.awt.*; import java.awt.event.*; import com.qq.server.model.MyQqServer; public class ControlPanel extends JFrame implements ActionListener{JPanel jp1;JButton jstart,jend;public ControlPanel(){ Font font = new Font("宋體",Font.PLAIN,30);jp1=new JPanel();jstart=new JButton("啟動(dòng)服務(wù)器");jstart.addActionListener(this);jend=new JButton("關(guān)閉服務(wù)器");jstart.setFont(font); jend.setFont(font);jstart.setForeground(Color.BLUE); jend.setForeground(Color.BLUE);jp1.add(jstart);jp1.add(jend);add(jp1);setLocation(150,150);setSize(900,900);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //結(jié)束窗口所在的應(yīng)用程序 setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubControlPanel controlpanel =new ControlPanel();}public void actionPerformed(ActionEvent arg0){if(arg0.getSource()==jstart){new MyQqServer();}} } //qq服務(wù)器,監(jiān)聽(tīng),等待某個(gè)qq客戶端鏈接 package com.qq.server.model;import java.io.*; //(I/O)流庫(kù),提供大量的流類 import java.net.*;//導(dǎo)入網(wǎng)絡(luò)包 import java.util.*; //實(shí)用工具類,提供了一些實(shí)用的方法和數(shù)據(jù)結(jié)構(gòu) import com.qq.common.*;public class MyQqServer {public MyQqServer (){//try-catch語(yǔ)句處理異常try{ //ServerSocket類表示服務(wù)器socket//在9999監(jiān)聽(tīng)System.out.println("服務(wù)器正在9999監(jiān)聽(tīng)");//簡(jiǎn)單判斷一下是否啟動(dòng)服務(wù)端ServerSocket ss=new ServerSocket(9999);while(true) //服務(wù)器可多次監(jiān)聽(tīng){Socket s=ss.accept() ; //阻塞,等待連接(與客戶端)//接收客戶端發(fā)來(lái)的信息ObjectInputStream ois=new ObjectInputStream(s.getInputStream());User u=(User)ois.readObject();System.out.println("用戶Id:"+u.getUserId()+" 密碼"+u.getPasswd()); Message m=new Message();ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());if(u.getPasswd().equals("123456")){//返回一個(gè)成功登錄的信息m.setMesType("1"); //mesType1 =1 表明登陸成功oos.writeObject(m); //單開(kāi)一個(gè)線程,讓該線程與該客戶端保持通信SerConClientThread scct=new SerConClientThread(s);ManageClientThread.addClientThread(u.getUserId(),scct);//放到HashMapscct.start(); //啟動(dòng)與該客戶端通信的線程}else{m.setMesType("2"); oos.writeObject(m); s.close(); //關(guān)閉連接(流)}}}catch(Exception e){e.printStackTrace();//將錯(cuò)誤信息全部打印}finally{}} } //服務(wù)器和某個(gè)客戶端的通信線程 package com.qq.server.model;import java.net.*; import java.io.*; import com.qq.common.*; public class SerConClientThread extends Thread //繼承Thread類 { Socket s;public SerConClientThread(Socket s){this.s=s; //把服務(wù)器和該客戶端的連接賦給s;}public void run(){while(true){//這里該線程就可以接受客戶端的信息try{ObjectInputStream ois=new ObjectInputStream(s.getInputStream());Message m=(Message)ois.readObject();System.out.println(m.getSender()+"給 "+m.getGetter()+"發(fā)送: "+m.getCon());//判斷接受到客戶端的信息//拿到發(fā)送者與服務(wù)器的socket,此時(shí)就需要hashmap;SerConClientThread sc=ManageClientThread.getClientThread(m.getGetter());ObjectOutputStream oos=new ObjectOutputStream(sc.s.getOutputStream()); //接受人的通信線程;oos.writeObject(m);}catch(Exception e){e.printStackTrace();}}} } //管理客戶端線程 package com.qq.server.model;import java.util.*;public class ManageClientThread { public static HashMap hm=new HashMap<String, SerConClientThread>();//向hm中添加一個(gè)客戶通訊線程public static void addClientThread(String uid,SerConClientThread ct){hm.put(uid, ct);}//返回socketpublic static SerConClientThread getClientThread(String uid){return (SerConClientThread) hm.get(uid);}}

總結(jié)

以上是生活随笔為你收集整理的java实现qq聊天(超详细)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

最新91在线视频 | 久久久www成人免费毛片 | 欧美va电影 | 久久久wwww| 视频一区二区三区视频 | 91视频国产免费 | 国产香蕉视频在线播放 | 日韩免费观看av | 精品久久久精品 | 欧美日韩69| 天堂成人在线 | 国产高清免费在线观看 | 免费看黄在线看 | 久操视频在线观看 | 五月天中文字幕mv在线 | 亚洲精品午夜一区人人爽 | 黄在线 | 日韩中文字幕免费视频 | 国产精品久久久久免费观看 | 成年人电影免费在线观看 | 国产91精品久久久久久 | 天天射天天爱天天干 | 成人国产精品免费 | 国产成人黄色 | 97精品超碰一区二区三区 | 综合国产视频 | wwwwww国产 | 国产精品video爽爽爽爽 | 丁香九月激情综合 | 天天操夜夜操 | 日韩精品免费一区 | www国产在线| 伊人婷婷激情 | 成年在线观看 | 黄色成年片 | 欧美伦理一区 | 欧美激情第一区 | 手机看片中文字幕 | 92精品国产成人观看免费 | 亚洲精品国产综合久久 | 日本一区二区三区免费观看 | 麻豆精品国产传媒 | 丁香资源影视免费观看 | 国产成人一区二区三区久久精品 | 不卡的av电影在线观看 | 奇米四色影狠狠爱7777 | 在线看日韩 | 五月婷色 | 狠狠色丁香九九婷婷综合五月 | 免费美女av | 伊人色综合久久天天 | 国产成在线观看免费视频 | 日本中文字幕高清 | 久久综合九色 | 久久免费视频这里只有精品 | 久久综合九色综合久久久精品综合 | 91字幕 | 在线成人av | 婷婷视频在线播放 | 国产精品免费视频网站 | 激情综合一区 | 人人干人人干人人干 | 亚州国产精品 | 伊人午夜视频 | 久久精品视频在线观看 | 特黄特色特刺激视频免费播放 | 亚洲自拍偷拍色图 | 91国内产香蕉 | 亚洲国产一区在线观看 | 狠狠久久综合 | 有没有在线观看av | 亚洲最新在线 | 亚洲精品视频久久 | 天天操操操操操 | 人人干干人人 | 亚洲午夜精品久久久久久久久久久久 | 91在线观看视频网站 | 在线观看完整版免费 | 婷婷六月综合网 | 亚洲国产精品免费 | 国产婷婷精品 | 天天爱天天舔 | 中文字幕在线观看网 | 欧美了一区在线观看 | 久章草在线观看 | 久久精品亚洲精品国产欧美 | 男女激情片在线观看 | 亚洲精品在线视频播放 | 亚洲成人第一区 | 免费久久99精品国产婷婷六月 | 免费在线观看成人av | 久久精品国产一区二区三 | 91视频麻豆视频 | 天天干天天做 | 久久久久免费精品视频 | 91香蕉视频 mp4 | 欧美一区二区三区在线看 | 欧美性视频网站 | 国内久久看| 日本资源中文字幕在线 | 久久区二区 | 91福利社在线观看 | 亚洲精选99 | 操综合 | 亚洲欧美日韩一区二区三区在线观看 | 91激情| 国产精品成人av在线 | 国产一区二区三区在线 | 一区二区高清在线 | 97人人添人澡人人爽超碰动图 | 国产精品美女久久久久久久久久久 | 欧美在线aaa | 在线91观看 | 久久国产免 | 亚洲欧美成人综合 | 国产精品一区二区三区四区在线观看 | 国产精品露脸在线 | 2023国产精品自产拍在线观看 | 黄色视屏av | 手机成人av在线 | 中文在线中文资源 | 亚洲视频久久 | 人人爱爱| 国产黄色精品网站 | 午夜久久成人 | 美女视频国产 | 亚洲综合小说电影qvod | 日日夜夜精品网站 | 五月天久久婷婷 | 欧美日韩免费看 | 伊人伊成久久人综合网站 | av一本久道久久波多野结衣 | 国产黄色免费观看 | 999久久久 | 国产精品毛片久久久久久 | 成人av电影在线播放 | 久久国产精品精品国产色婷婷 | 91网页版免费观看 | 日韩特黄av | 在线免费观看国产黄色 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 国内精品久久久久影院男同志 | 91理论片午午伦夜理片久久 | 激情丁香月| 国产99久久 | 探花视频在线观看免费 | 国产一二区免费视频 | 久久成人一区 | 色爱区综合激月婷婷 | 日本黄色免费网站 | 日本福利视频在线 | 天天天操天天天干 | 国产精品三级视频 | 四虎最新域名 | 精品国产91亚洲一区二区三区www | 中文字幕一区二区三区在线视频 | 成人啊 v | 97中文字幕| 国产美女免费看 | 国产高清在线不卡 | 成 人 黄 色 片 在线播放 | 91精品资源 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | av丝袜美腿 | 99久热在线精品视频观看 | 婷婷色五| 天天综合五月天 | 探花视频网站 | 在线国产日本 | 亚洲精区二区三区四区麻豆 | 爱av在线网 | av黄色在线播放 | 日韩在线观 | 韩国一区二区在线观看 | 91视频成人免费 | 国产综合激情 | 久久婷婷精品视频 | 丁香花在线视频观看免费 | 欧美电影黄色 | 国产精品一区二区三区免费视频 | 日韩视频在线观看视频 | 久久天天躁狠狠躁夜夜不卡公司 | 日韩av成人在线观看 | 日本一区二区三区免费观看 | 9色在线视频 | 综合婷婷丁香 | 香蕉久草 | 欧美日韩后| 成片人卡1卡2卡3手机免费看 | 国产精品9999久久久久仙踪林 | 91一区啪爱嗯打偷拍欧美 | 亚洲每日更新 | 欧美另类美少妇69xxxx | 黄色毛片电影 | 国产精品视频区 | 综合网在线视频 | 国产日韩视频在线播放 | 成人在线免费看视频 | 亚洲人成精品久久久久 | 免费情趣视频 | 69中文字幕 | 一区二区 不卡 | 黄色小说网站在线 | 欧美性超爽 | av三级av | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产一级电影网 | 久久激情小说 | 五月天婷婷视频 | 99视频在线精品国自产拍免费观看 | 中文字幕亚洲在线观看 | 天天做日日做天天爽视频免费 | 狠狠狠色 | av电影一区二区三区 | 深夜免费小视频 | 国产中文字幕视频 | 99久久国产免费看 | 欧美久久久久久久久 | 国产精品成人av在线 | 玖玖爱免费视频 | 婷婷久久网站 | 亚洲一区二区天堂 | 亚洲精品乱码久久 | 黄av资源 | 久久人人看 | 精品国产色 | 9在线观看免费 | 亚洲一级二级三级 | 亚洲在线精品 | 天堂激情网| 亚洲女同ⅹxx女同tv | 亚洲小视频在线观看 | 91麻豆产精品久久久久久 | 国产97视频在线 | 欧美色888 | 欧美少妇xxx | av福利网址导航大全 | 免费在线观看成人 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 久久99久久99精品免视看婷婷 | 日韩精品一区在线观看 | 亚洲一区不卡视频 | 成年人在线看片 | 天天色天天操天天爽 | 国产精品久久久久久久久久尿 | 国产成在线观看免费视频 | 成人黄色电影在线播放 | 精品99久久 | www.天天射.com | 九九热精品视频在线播放 | 亚洲美女精品视频 | 奇米影视999| 91高清完整版在线观看 | 日韩欧美高清在线 | 国产不卡av在线 | 免费成人av电影 | 亚洲亚洲精品在线观看 | 国产香蕉97碰碰碰视频在线观看 | 狠狠色香婷婷久久亚洲精品 | 中文字幕传媒 | 久久久精品免费观看 | 91中文字幕一区 | 国产精品福利午夜在线观看 | 国产你懂的在线 | 中文日韩在线视频 | 4438全国亚洲精品观看视频 | 欧美久久久一区二区三区 | 国产 中文 日韩 欧美 | 日一日干一干 | 久久婷婷精品视频 | 91免费高清观看 | 国产三级久久久 | 69精品 | 亚洲精品伦理在线 | 国产精品一区免费在线观看 | 国产精品免费在线播放 | 日韩不卡高清视频 | 日韩美视频 | 久久99久国产精品黄毛片入口 | 国产日产精品一区二区三区四区 | 在线天堂中文在线资源网 | 九九九九热精品免费视频点播观看 | 国产色中涩| 久久国产精品精品国产色婷婷 | 中文av在线免费观看 | 亚洲成av人片在线观看www | 视频99爱 | 91在线视频在线 | 成人久久久久久久久 | 97成人精品区在线播放 | 国产精品国内免费一区二区三区 | 黄色大全视频 | 美女网站视频免费都是黄 | 日本韩国中文字幕 | 国产午夜一级毛片 | 久久在线观看视频 | 中文字幕二区 | 久久久国产高清 | 国产精品美女免费视频 | 成人久久久久久久久 | 91探花系列在线播放 | 人人干免费 | 国产欧美精品一区二区三区 | 精品国产一区二区三区久久久蜜臀 | 国产精品永久在线 | 精品福利在线视频 | 在线观看亚洲国产 | 在线观看va| 亚洲人成网站精品片在线观看 | 成人播放器 | 黄色av影视 | 亚洲精品成人 | 国产精品系列在线观看 | 国产精品1区2区 | 9在线观看免费高清完整版在线观看明 | 亚洲欧美日韩不卡 | 久久精品中文字幕少妇 | 中文字幕在线视频精品 | 午夜在线免费观看视频 | 美女在线观看av | 国产福利一区二区三区在线观看 | 久久久久观看 | 国产在线精品一区二区三区 | 日日爽天天操 | 午夜视频日本 | 久久视频国产精品免费视频在线 | 亚洲成av片人久久久 | 国产裸体视频网站 | 欧美中文字幕久久 | 天天干天天看 | 玖草影院 | 在线a亚洲视频播放在线观看 | 国产欧美日韩视频 | 欧美色久 | 欧美怡红院 | 免费观看国产视频 | 国产精品二区在线观看 | 91视频 - v11av | 色视频网址 | 免费av网站在线看 | 五月天婷亚洲天综合网精品偷 | 最新国产在线观看 | 激情文学综合丁香 | 久草在线视频免费资源观看 | 国产视频精品免费播放 | 日韩欧美aaa| 精品国产aⅴ麻豆 | 日韩中文字幕网站 | 91你懂的 | 国产 亚洲 欧美 在线 | 亚洲欧美日本一区二区三区 | 五月婷婷综合网 | 视频直播国产精品 | 中文在线a在线 | 欧美日韩亚洲精品在线 | 婷色在线 | 国产精品一区二区三区久久 | 亚洲成aⅴ人在线观看 | 欧美午夜a | 亚州日韩中文字幕 | 欧美日韩国产在线 | 欧美日韩高清免费 | 亚洲精品视频第一页 | 国产精品一区二区在线看 | 午夜性生活片 | av福利在线免费观看 | 黄色成人在线观看 | av在线播放中文字幕 | 欧美大片第1页 | 国产一级视频在线 | 丁香综合 | 天天夜夜狠狠操 | 综合网天天色 | 黄色av三级在线 | 99久久99久久精品国产片果冰 | 成人黄色电影在线播放 | 97视频资源 | 久久久精品免费看 | 国产精品专区在线观看 | 中文字幕一区二区三区在线视频 | 亚洲三级影院 | 日韩精品一区二区三区外面 | 国产精品色婷婷 | 中文字幕资源在线 | 日韩久久精品一区二区 | 国产麻豆精品95视频 | 久久久精品 一区二区三区 国产99视频在线观看 | 成人免费视频在线观看 | 日韩免费观看一区二区 | 国产网站色 | 99精品久久久久 | 日本在线中文在线 | 亚洲精选国产 | av成人动漫在线观看 | 爱爱av网站 | 日韩精品亚洲专区在线观看 | 久章草在线观看 | 综合久久久久 | 黄网站污 | 伊人天堂久久 | 亚洲综合色站 | 久热国产视频 | 韩日三级在线 | 爱爱av在线 | 日韩亚洲精品电影 | 夜夜操狠狠操 | 成人在线观看免费视频 | 国产中年夫妇高潮精品视频 | 成人av在线直播 | 欧美日韩在线免费观看视频 | 日韩成人免费观看 | 久久五月情影视 | 色综合久久久久综合99 | 狠狠干成人综合网 | 日韩sese| 日韩欧美黄色网址 | 91在线在线观看 | 午夜精品一区二区三区在线 | 亚洲天堂在线观看完整版 | 欧美另类网站 | 日韩在线观看中文字幕 | 国产麻豆剧传媒免费观看 | 这里只有精品视频在线观看 | 国产一级黄色电影 | 日日日爽爽爽 | 精品色综合 | 四虎国产视频 | 最新高清无码专区 | 精品电影一区 | 精品女同一区二区三区在线观看 | 97综合网 | 四虎成人精品在永久免费 | 日韩一区二区免费视频 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 久久99精品久久久久久清纯直播 | 国产一区二区三区免费在线 | 成人av电影免费在线播放 | 99这里只有精品视频 | 涩涩伊人 | 一区二区三区在线免费播放 | 中文av字幕在线观看 | 综合网五月天 | 日韩av在线一区二区 | 超碰.com| 五月天视频网 | 久久夜靖品 | 亚洲第一区精品 | 激情婷婷在线 | 天天舔天天射天天操 | 国产成人精品999在线观看 | 久久伊人精品一区二区三区 | 奇米影视777四色米奇影院 | 四虎成人精品在永久免费 | 免费看成人 | 狠狠狠色丁香综合久久天下网 | 成人黄色电影免费观看 | 91在线国内视频 | 国产伦理久久精品久久久久_ | 国产在线999 | 免费亚洲电影 | 欧美性做爰猛烈叫床潮 | 国产91勾搭技师精品 | 午夜私人影院久久久久 | 亚州人成在线播放 | 免费视频91 | 999久久久精品视频 日韩高清www | 91免费黄视频 | 欧美 高跟鞋交 xxxxhd | 天天av在线播放 | 国产精品手机在线播放 | 亚洲精品免费在线观看 | 国产中出在线观看 | 国产精品久久久久久电影 | 999日韩| 国产精品一区在线观看你懂的 | 摸bbb搡bbb搡bbbb| 亚洲小视频在线观看 | 国产精品一区二区三区久久 | 日韩免费av在线 | 国产高清无线码2021 | 91精品国产乱码久久桃 | 亚洲免费在线播放视频 | 成人9ⅰ免费影视网站 | 手机在线小视频 | 国产成人免费观看久久久 | 久久在草 | 一区二区三区四区在线 | 五月开心激情 | 精品一区二区在线看 | 毛片1000部免费看 | 国产成人精品一区二区在线观看 | 国产精品99久久久久人中文网介绍 | 久久不见久久见免费影院 | 欧洲精品码一区二区三区免费看 | 精品久久久久久一区二区里番 | 麻豆国产精品一区二区三区 | 激情网站网址 | 午夜视频在线观看一区二区三区 | 国产精品久久网 | 国产成人久久精品77777 | 黄色毛片一级 | 99c视频高清免费观看 | 色wwww| 麻豆视频免费在线观看 | 日韩在线观看中文字幕 | 97久久久免费福利网址 | 免费三级在线 | 国产精品初高中精品久久 | 久久久精品小视频 | 国产美女视频免费观看的网站 | 成人精品一区二区三区中文字幕 | 人人爱人人舔 | 日韩 精品 一区 国产 麻豆 | 99久久精| 久久草草影视免费网 | 久久夜色精品国产欧美乱极品 | 亚洲欧美视频 | 丝袜美腿在线播放 | 91av在线免费 | www激情com | 国产大尺度视频 | 人人超碰97| 久久久久久亚洲精品 | 久久久999免费视频 日韩网站在线 | 国产很黄很色的视频 | 天天综合精品 | 911精品美国片911久久久 | 国产精品1区2区3区在线观看 | 99综合久久 | 婷婷六月网 | 开心激情网五月天 | 中文在线√天堂 | 99视屏| 成人午夜免费福利 | 日本九九视频 | 久久久官网| 999久久久久久久久6666 | 欧美国产日韩久久 | 国产日本在线播放 | 又黄又刺激又爽的视频 | 国产一区在线不卡 | 日韩精品一区二区三区在线播放 | 日本二区三区在线 | 日本99热 | 久久少妇免费视频 | 国产精品视频99 | 一本一本久久a久久精品综合妖精 | 成人一级片视频 | 99r在线观看 | 久久久免费少妇 | 又黄又爽又色无遮挡免费 | 成人一区二区在线观看 | 国产精品久久久久av免费 | 天天鲁天天干天天射 | 久久视频在线免费观看 | 久草在线视频精品 | 亚洲黄色在线播放 | 手机在线观看国产精品 | 国产黄色一级大片 | 午夜久久网站 | 高清精品视频 | 欧美在线free | 去干成人网 | 亚欧日韩av | 欧美福利视频一区 | 精品一区二区免费 | 久久久久亚洲精品男人的天堂 | 黄影院| 日韩中文字幕国产 | 久久免费视频6 | 中文字幕在线观看你懂的 | 国产精品五月天 | 在线免费黄色 | 波多野结衣视频一区 | 国产福利在线不卡 | 亚洲欧美国产精品18p | 美女网站黄在线观看 | 国产大片黄色 | 成人va视频 | 韩国视频一区二区三区 | 中国一 片免费观看 | 国产一区电影在线观看 | 国产精品va最新国产精品视频 | 国产精品不卡在线 | 亚洲经典中文字幕 | 不卡的av电影 | 亚洲精品小视频 | 国产电影黄色av | 在线观看黄色 | 日韩中文字幕网站 | 草久久久久 | 欧美国产日韩一区 | 免费午夜视频在线观看 | 欧美激情精品久久久久久免费 | 中文字幕在线免费 | 在线电影 你懂得 | 午夜性生活 | 视频在线观看91 | 黄色a大片 | 国产精品久久av | 午夜成人影视 | 狠狠狠狠狠狠干 | 色婷婷久久久综合中文字幕 | 亚洲a色| 又黄又刺激视频 | 黄网av在线 | 国产精品久久久久久久久岛 | 开心激情婷婷 | 91麻豆传媒 | 亚洲在线网址 | 在线亚洲天堂网 | 99视频+国产日韩欧美 | 81国产精品久久久久久久久久 | 亚洲,播放 | 超碰人人乐 | 国产午夜在线观看 | av在线在线 | 在线久久 | 美女视频黄频大全免费 | 五月婷婷综合激情网 | 亚洲aⅴ乱码精品成人区 | 精品视频123区在线观看 | 狠狠色狠狠综合久久 | 国产精品免费观看久久 | 亚洲特级片 | 日本精品视频免费观看 | 国产精品一区二区电影 | 97在线视频观看 | 天天干,天天操,天天射 | 久久视频在线看 | 国产精品久久久久久超碰 | 久久99久久99免费视频 | 日韩三级中文字幕 | 黄色大片网 | 久久99亚洲精品久久 | 久草在线资源观看 | av片在线看 | 91精品成人久久 | 91精品国 | 天天综合网天天 | 97在线观看免费高清完整版在线观看 | 国产在线专区 | 中文字幕在线视频一区 | 又黄又爽的免费高潮视频 | 国产一区在线免费观看 | 亚洲精品午夜aaa久久久 | 日批视频在线观看免费 | 国产精品情侣视频 | 中文字幕在线观看你懂的 | 国产成人av在线影院 | 久久久伦理 | 在线中文字幕播放 | 精品免费在线视频 | 日韩精品一区二区在线观看 | a在线播放 | 伊人婷婷网| 四虎在线视频免费观看 | 在线观看视频福利 | 超碰免费av | 欧洲精品视频一区 | 在线免费观看成人 | 欧美日韩综合在线 | 亚洲精品成人网 | 在线 欧美 日韩 | 五月激情亚洲 | 亚洲免费精品视频 | 久久久久亚洲精品成人网小说 | 丝袜美女在线观看 | av电影在线观看完整版一区二区 | 韩日精品在线 | 国产一区二区在线播放视频 | 日本在线成人 | av大片免费 | 日韩欧美电影在线 | 黄色毛片视频免费观看中文 | 欧美一二三区在线播放 | 在线亚洲人成电影网站色www | 欧美激情视频一二区 | 亚洲亚洲精品在线观看 | 江苏妇搡bbbb搡bbbb | 国产 视频 高清 免费 | 日本韩国精品在线 | 国产精品 日韩 | 97超碰在线资源 | 中文免费 | 狠狠狠狠狠狠狠狠干 | 丁香六月激情婷婷 | 国产一级片免费观看 | 日韩高清观看 | 成人免费看片98欧美 | 久久久久久久看片 | 97麻豆视频| 人人射人人插 | 激情偷乱人伦小说视频在线观看 | 日韩中出在线 | 色综合色综合久久综合频道88 | 国产精品女人网站 | 午夜精品影院 | 久久五月婷婷综合 | 婷婷视频在线播放 | 深爱激情五月综合 | 91亚洲国产 | 日韩av电影免费观看 | 黄污网 | 中文视频在线 | 日韩精品一区二区在线观看视频 | 天天干天天干天天操 | 一级黄色免费网站 | 美女av在线免费 | 国产乱对白刺激视频在线观看女王 | 欧美日韩精品在线 | 天天干天天干天天 | 亚洲一区精品二人人爽久久 | 日本黄色大片免费 | 久久人人添人人爽添人人88v | 91一区啪爱嗯打偷拍欧美 | 波多野结衣一区三区 | 夜夜躁天天躁很躁波 | 伊人黄色网 | 欧美精品久久久久性色 | 最新中文字幕在线播放 | 青青草国产精品 | 国产亚洲一区二区在线观看 | 丰满少妇久久久 | 亚洲电影av在线 | 99久久精品无免国产免费 | 青青河边草手机免费 | 国产又粗又猛又爽又黄的视频免费 | 久久久久人人 | 91欧美视频网站 | 香蕉久久久久久av成人 | 国产婷婷 | 激情综合久久 | a黄色| 日女人电影 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 中文久久精品 | 日本公妇在线观看 | 丰满少妇对白在线偷拍 | 99久久er热在这里只有精品15 | 久久激情小说 | 日本精油按摩3 | 五月在线 | 天堂av官网| 韩国一区二区三区在线观看 | 久久国产a | 中文av在线播放 | 久草五月 | 欧美色888 | 成人午夜网 | 久久天天操 | 国产免费不卡av | www免费视频com━ | 美女黄濒 | 国产精品免费视频观看 | 久久艹国产视频 | 少妇高潮冒白浆 | 在线播放日韩 | 日本爽妇网 | 日日操网站 | 国产亚洲精品无 | 国产精品久久久久久久久久久久 | 久久久久久网址 | 国产又黄又爽又猛视频日本 | 国产无套精品久久久久久 | 久久久精品在线观看 | 久草在线观看资源 | 最新真实国产在线视频 | 久久亚洲影视 | 久久综合九色九九 | av丝袜天堂 | 成人国产精品一区 | 人人干在线| 一区二区三区四区精品 | 亚洲 中文 在线 精品 | 日韩一区二区三区不卡 | 久亚洲| 国产成人精品在线观看 | 国产无吗一区二区三区在线欢 | 国产精品一区二区av | 狠狠插天天干 | 中文字幕中文字幕 | 久久久久成人免费 | 97免费在线观看视频 | 亚洲精品免费观看视频 | 在线看欧美 | 丁香婷婷激情国产高清秒播 | 最近日本韩国中文字幕 | 国产亚洲免费观看 | 四虎成人精品在永久免费 | 久久久国产一区二区三区 | 人人超碰免费 | 国产真实精品久久二三区 | av福利在线免费观看 | 国产国语在线 | 黄色av一级 | 国产亚洲精品成人av久久ww | 国产精品原创视频 | 99这里只有| 亚洲精品视频二区 | 久草免费在线视频观看 | 亚洲欧美一区二区三区孕妇写真 | 欧美在线a视频 | 97视频在线免费 | 色福利网站 | 亚洲欧美日韩一二三区 | 国产成人精品一区二区在线 | 久久精品女人毛片国产 | 久久成人18免费网站 | 一区二区三区久久精品 | 欧美日韩免费观看一区二区三区 | 国偷自产视频一区二区久 | 色婷五月| 在线中文字幕电影 | 国产精品成人一区二区三区 | 99久久久国产精品免费99 | 日本一区二区免费在线观看 | 91亚洲精品乱码久久久久久蜜桃 | 九九热99视频 | 91传媒激情理伦片 | 日韩va在线观看 | 久久久久久久久久久久电影 | 久久婷婷精品视频 | 国产福利91精品一区二区三区 | 色综合久久精品 | 97在线视| av大片网址 | 日本性生活一级片 | 欧美中文字幕久久 | 久久久精品在线观看 | 欧美精品xx | 69成人在线 | 精品视频区 | 亚洲经典在线 | 色999五月色 | 日韩精品久久一区二区三区 | 亚洲精品在线二区 | 中文字幕资源站 | 久久久香蕉视频 | 91亚色免费视频 | 中文字幕一区二区三区在线观看 | 国产高清小视频 | 91在线看片| 欧美日本啪啪无遮挡网站 | 97精品国产97久久久久久久久久久久 | www四虎影院 | 久久久精品欧美一区二区免费 | 91亚洲精品久久久久图片蜜桃 | 国产九色在线播放九色 | 国产99久久99热这里精品5 | 激情久久综合网 | 狠狠干五月天 | 福利视频一二区 | 欧美一级片在线观看视频 | 香蕉视频色 | 亚洲精品在线观看的 | 激情综合网天天干 | 丁香亚洲| 天天操天天射天天 | 在线观av | 五月婷av | 97在线观看免费视频 | 超碰97网站| 国产最新在线视频 | 一区 二区电影免费在线观看 | 99在线播放 | av综合站| 一本大道久久精品懂色aⅴ 五月婷社区 | 婷婷5月激情5月 | 天天久久夜夜 | 开心激情网五月天 | 成年人在线免费看视频 | 国产精品成人一区 | 免费在线播放视频 | 中文在线免费一区三区 | 亚洲欧洲日韩 | 亚洲黄在线观看 | 久热精品国产 | 亚洲日韩中文字幕在线播放 | 91黄色免费看 | 波多野结衣在线播放一区 | 国产精品第52页 | 精品久久久网 | 在线成人av | 午夜国产一区二区 | 天天狠狠干 | 久久免费视频3 | 久草视频在线资源 | 国产精品观看在线亚洲人成网 | 久久午夜精品影院一区 | 久久99婷婷| 亚洲综合色av | 国产精品影音先锋 | 国产精品毛片一区 | 99精品在线直播 | 一区二区三区免费网站 | 激情av在线播放 | 国产成人一区二区三区电影 | 97视频在线观看视频免费视频 | 国产精品自产拍在线观看 | 日韩在线不卡 | 日本中文字幕在线视频 | 奇米7777狠狠狠琪琪视频 | 99999精品视频 | 人人玩人人添人人澡97 | 黄色小说在线观看视频 | 黄色影院在线观看 | 久久久久久网址 | 精品毛片一区二区免费看 | www.色五月 | 亚洲成a人片77777kkkk1在线观看 | 国产日韩精品一区二区 | 97视频人人 | 亚洲精品视频中文字幕 | 在线观看完整版免费 | 日本久久久精品视频 | 91精品天码美女少妇 | 国产亚洲婷婷免费 | 九九在线视频 | 久草综合在线观看 | 中文字幕成人在线观看 | 亚洲一区二区黄色 | 国产精品美女网站 | 成人av电影在线 | 日韩免费电影一区二区 | 欧美最猛性xxxxx免费 | 亚洲欧美国产日韩在线观看 | 午夜精品一区二区三区在线播放 | av观看久久久| 人人爱人人爽 | 亚洲不卡av一区二区三区 | 日韩一级电影网站 | 91看毛片| 日韩精品视频免费在线观看 | 99免费在线视频观看 | 亚洲精品国产高清 | 中文字幕久久亚洲 | 人人精品久久 | 91在线看网站 | 久久免费毛片 | 欧美一级爽| 精品国产大片 | 免费精品在线 | 香蕉手机在线 | 欧美a√大片 | 伊人五月天 | 91精品国产电影 | 久久久在线免费观看 | www国产在线| 国产亚洲一区二区三区 | 在线观看视频福利 | 五月婷婷在线播放 | 欧美精品久久久久久久久久白贞 | 韩国一区视频 | 久久久久久黄色 | 中文字幕在线观看日本 | 狠狠色丁香久久婷婷综合_中 | 99久久精 | 国产精品乱码在线 | 911精品美国片911久久久 | 精品国产免费看 | 高清中文字幕 | 久久久久日本精品一区二区三区 | 中国一级片免费看 | 日韩天天干 | 欧美日韩精品在线视频 | 国产一级大片免费看 | 国产粉嫩在线观看 | 中文在线免费一区三区 | av在线一二三区 | 欧美婷婷综合 | www.com黄 | 天天插天天操天天干 | 91最新网址在线观看 | 97在线视频免费 | 激情久久影院 | 最新中文字幕在线观看视频 | 国产精品永久 | 国产亚洲va综合人人澡精品 | 国产极品尤物在线 | 国产在线播放一区二区三区 | 国产尤物一区二区三区 | 久草精品视频 | av在线成人 | 88av视频| 国精产品999国精产品视频 | 欧美视频www | 日韩视频1区 | 日本一区二区三区免费观看 | 中文字幕色在线视频 | 亚洲一级黄色大片 | 国产亚洲婷婷免费 | 国内精品久久久久久久久久清纯 | 九九久久久久99精品 | 免费精品| 天天干,天天插 | 日日夜夜天天干 | 中文字幕一区二区三 |