資源簡介
Java QQ聊天程序源碼,userInfo.properties拷貝到C盤根目錄下,存放與服務器連接上的對應的Socket,作用是保存服務器與客戶端之間的流,便于服務器給每個客戶端進行回發消息。
SocketListener內部類:監聽客戶端是否有連接到服務器,并將此客戶端的Socket傳遞給HandleSocket進行處理,同時將client存放到List中,即clientConnection中。 HandleSocket內部類:處理一個Socket,接收一個Client發送過來的消息,并且服務器原封不動的返回給所有客戶端,客戶端對消息進行過濾。

代碼片段和文件信息
package?com.qq.main;
import?java.awt.Dimension;
import?java.awt.TextArea;
import?java.awt.Toolkit;
import?java.awt.event.ActionEvent;
import?java.awt.event.ActionListener;
import?java.awt.event.KeyAdapter;
import?java.awt.event.KeyEvent;
import?java.awt.event.MouseAdapter;
import?java.awt.event.MouseEvent;
import?java.io.IOException;
import?java.util.Vector;
import?javax.swing.JButton;
import?javax.swing.Jframe;
import?javax.swing.JLabel;
import?javax.swing.JList;
import?javax.swing.JOptionPane;
import?javax.swing.JScrollPane;
public?class?AllTalkframe?extends?Jframe?{
TextArea?oldMessageTextArea;
TextArea?sendMessageTextArea;
JList?userList;
JScrollPane?userListPane;
JButton?btSend;
JButton?btClosed;
JButton?upLine;
String?doubleClickedName;
Client?client;
String?clientName;
JLabel?userlisttitle;
Vector?users;
//?只要服務器端有消息,就將消息顯示到oldMessageTextArea
class?showOldMessageThread?implements?Runnable?{
public?void?run()?{
boolean?flag?=?true;
while?(flag)?{
try?{
//?接收群聊服務器端回發過來的消息
String?serverOutput?=?client.br.readLine()?+?“\r\n“;
if?(!serverOutput.startsWith(“私聊“)
&&?!serverOutput.startsWith(“*“)
&&?!(serverOutput.substring(serverOutput
.indexOf(“:“)?+?1).equals(“\r\n“)))?{
String?s1?=?serverOutput.replace(‘說‘?‘?‘);
String?s?=?s1.replaceAll(“罎“?“\r\n?????“);
oldMessageTextArea.append(s);
}
//?添加客戶端的用戶在線列表
if?(!serverOutput.startsWith(“*“)
&&?!serverOutput.startsWith(“私聊“)
&&?(serverOutput.indexOf(“說“)?!=?-1))?{
String?listName?=?serverOutput.substring(0
serverOutput.indexOf(‘說‘));
//?如果JList中有相同名字的用戶,則不添加,否則添加
if?(!users.contains(listName))?{
System.out.println(“用戶“?+?listName?+?“上線了“);
users.add(listName);
userList.setListData(users);
}
}
//?判斷服務器回發過來的消息是不是以“私聊“開頭的,是的話就提取出這兩個用戶名
if?(serverOutput.startsWith(“私聊“))?{
String?siliaoName1?=?serverOutput.substring(
serverOutput.indexOf(“*“)?+?1?serverOutput
.indexOf(“和“));
String?siliaoName2?=?serverOutput.substring(
serverOutput.indexOf(“和“)?+?1?serverOutput
.indexOf(“\r“));
String?siliaoBenshen?=?““;
String?siliaoDuixiangName?=?““;
if?(siliaoName1.equals(clientName))?{
siliaoBenshen?=?siliaoName1;
siliaoDuixiangName?=?siliaoName2;
}?else?{
siliaoBenshen?=?siliaoName2;
siliaoDuixiangName?=?siliaoName1;
}
//?判斷這兩個名字中是否有與自己同名的,有的話就彈出個私聊窗口
if?(siliaoName1.equals(clientName)
||?siliaoName2.equals(clientName))?{
new?PointToPointTalkframe(siliaoBenshen?+?“和“
+?siliaoDuixiangName).setVisible(true);
}
}
}?catch?(IOException?e1)?{
System.out.println(“讀取服務器端消息出錯“);
}
}
}
}
AllTalkframe(final?String?clientName)?{
this.clientName?=?clientName;
client?=?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????232??2012-07-10?19:20??srcfans.com\QQ\QQ\.classpath
?????文件????????382??2012-07-10?19:20??srcfans.com\QQ\QQ\.project
?????文件?????????89??2012-07-10?19:20??srcfans.com\QQ\QQ\.settings\org.eclipse.core.resources.prefs
?????文件????????930??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\AllTalkfr
?????文件???????1488??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\AllTalkfr
?????文件???????1615??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\AllTalkfr
?????文件????????749??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\AllTalkfr
?????文件???????1659??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\AllTalkfr
?????文件???????2985??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\AllTalkfr
?????文件???????3349??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\AllTalkfr
?????文件???????1695??2012-07-10?19:25??srcfans.com\QQ\QQ\bin\com\qq\main\Client.class
?????文件???????1864??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\Main$1.class
?????文件????????659??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\Main$2.class
?????文件???????2486??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\Main.class
?????文件???????1485??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\PointToPointTalkfr
?????文件????????780??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\PointToPointTalkfr
?????文件???????2793??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\PointToPointTalkfr
?????文件???????3106??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\main\PointToPointTalkfr
?????文件????????778??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\regist\Regist$1.class
?????文件????????786??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\regist\Regist$2.class
?????文件???????1074??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\regist\Regist$3.class
?????文件????????783??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\regist\Regist$4.class
?????文件???????2052??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\regist\Regist$5.class
?????文件????????844??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\regist\Regist$6.class
?????文件???????3014??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\com\qq\regist\Regist.class
?????文件???????1812??2012-07-10?19:27??srcfans.com\QQ\QQ\bin\com\qq\regist\UserInformation.class
?????文件???????2289??2012-07-10?19:25??srcfans.com\QQ\QQ\bin\com\qq\server\Server$HandleSocket.class
?????文件???????1408??2012-07-10?19:25??srcfans.com\QQ\QQ\bin\com\qq\server\Server$SocketListener.class
?????文件???????1558??2012-07-10?19:25??srcfans.com\QQ\QQ\bin\com\qq\server\Server.class
?????文件???????3845??2012-07-10?19:20??srcfans.com\QQ\QQ\bin\images\企鵝.JPG
............此處省略34個文件信息
評論
共有 條評論