山寨QQ韩顺平版Word文档下载推荐.docx
- 文档编号:20601423
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:33
- 大小:66.82KB
山寨QQ韩顺平版Word文档下载推荐.docx
《山寨QQ韩顺平版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《山寨QQ韩顺平版Word文档下载推荐.docx(33页珍藏版)》请在冰豆网上搜索。
/**
*客户端连接服务器后台
**/
publicclassQqClientConService{
publicSocketclient;
//判断是否成功登录,成功返回true,否则返回false
publicbooleansendLoginInfoToServer(Objecto){
booleanisLogin=false;
try{
//创建连接
client=newSocket("
localhost"
9999);
ObjectOutputStreamoos=newObjectOutputStream(client.getOutputStream());
oos.writeObject(o);
ObjectInputStreamois=newObjectInputStream(client.getInputStream());
Messagemessage=(Message)ois.readObject();
//登录成功的判断
if(message.getMesType()==1){
isLogin=true;
//登录成功,创建一个改客户端和服务器的线程
ClientConServerThreadccst=newClientConServerThread(client);
//把改线程添加到管理线程的map中
ManageClientConServerThread.addClientConServerThread(((User)o).getName(),ccst);
//启动该线程
newThread(ccst).start();
}
}catch(Exceptione){
e.printStackTrace();
}
returnisLogin;
}
}
QqClientUser类:
*这是QQ客户端,发送用户名和密码
*
publicclassQqClientUser{
//调用客户端连接服务器后台的方法,返回true为成功登录,false为登入失败
publicbooleancheckUser(Useruser){
returnnewQqClientConService().sendLoginInfoToServer(user);
ClientConServerThread类:
packagecom.qq.client.tools;
importcom.qq.client.view.QqChar;
importcom.qq.client.view.QqFriendList;
importmon.MessageType;
*这是客户端和服务器保持通讯的线程
publicclassClientConServerThreadimplementsRunnable{
publicClientConServerThread(Socketclient){
this.client=client;
@Override
publicvoidrun(){
//不停的读取从服务器发来的消息
while(true){
try{
ObjectInputStreamois=newObjectInputStream(client.getInputStream());
Messagemessage=(Message)ois.readObject();
//判断发来的消息包是否为普通消息包,或者是返回在线好友的包
if(message.getMesType()==MessageType.message_common_mes){
//把从服务器发来的消息显示在聊天界面:
1.从管理聊天窗口的类中取得该窗口2.调用显示方法.
QqCharqqChar=ManageQqChar.getQqChar(message.getGetter()+"
"
+message.getSender());
qqChar.showMessage(message);
}elseif(message.getMesType()==MessageType.message_ret_onLineFriend){
Stringgetter=message.getGetter();
//修改响应的好友列表
QqFriendListqqFriendList=ManageQqFriendList.getQqFriendList(getter);
//更新在线好友
if(qqFriendList!
=null){
qqFriendList.updateFriend(message);
}
}
}catch(Exceptione){
e.printStackTrace();
ManageClientConServerThread类:
importjava.util.HashMap;
importjava.util.Map;
*这是一个管理客户端和服务器保持通讯的线程类
publicclassManageClientConServerThread{
publicstaticMapmap=newHashMap<
String,ClientConServerThread>
();
//把线程添加到map中
publicstaticvoidaddClientConServerThread(StringuserName,ClientConServerThreadccst){
map.put(userName,ccst);
//根据用户名取得该线程
publicstaticClientConServerThreadgetClientConServerThread(StringuserName){
return(ClientConServerThread)map.get(userName);
ManageQqChar类:
*这是一个管理用户聊天界面的类
publicclassManageQqChar{
String,QqChar>
//把用户聊天界面Qqchar添加到map中
publicstaticvoidaddQqChar(StringloginAndFriend,QqCharqqchar){
map.put(loginAndFriend,qqchar);
//根据登入用户和发送用户取得该聊天界面
publicstaticQqChargetQqChar(StringloginAndFriend){
return(QqChar)map.get(loginAndFriend);
ManageQqFriendList类:
*管理好友、黑名单..界面类
publicclassManageQqFriendList{
String,QqFriendList>
//把用用户列表类添加到map中
publicstaticvoidaddQqFriendList(StringuserName,QqFriendListlist){
map.put(userName,list);
//根据登录用户取得该用户列表类
publicstaticQqFriendListgetQqFriendList(StringuserName){
return(QqFriendList)map.get(userName);
QqChar类:
packagecom.qq.client.view;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.util.Date;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
*QQ聊天窗口
publicclassQqCharextendsJFrameimplementsActionListener{
JTextFieldjtf;
//输入的文本框
JTextAreajta;
//文本区域
JButtonjb;
//发送按钮
JPaneljp;
//装文本框和发送按钮的panel
Stringfriend;
StringuserName;
publicstaticvoidmain(String[]args){
QqCharqqChar=newQqChar("
1"
"
2"
);
publicQqChar(StringuserName,Stringfriend){
this.userName=userName;
this.friend=friend;
jtf=newJTextField(15);
jta=newJTextArea();
jb=newJButton("
发送"
jb.addActionListener(this);
jp=newJPanel();
jp.add(jtf);
jp.add(jb);
this.add(jta,"
Center"
this.add(jp,"
South"
this.setTitle(userName+"
正在和"
+friend+"
聊天"
this.setIconImage(newImageIcon("
image/qq.png"
).getImage());
this.setSize(300,200);
this.setVisible(true);
publicvoidshowMessage(Messagemessage){
Stringinfo=message.getSender()+"
对"
+message.getGetter()+"
说:
"
+message.getContext()+"
\r\n"
;
this.jta.append(info);
publicvoidactionPerformed(ActionEvente){
//当点击发送按钮时,把消息发送到服务器端
if(e.getSource()==jb){
Messagemessage=newMessage();
message.setMesType(MessageType.message_common_mes);
message.setSender(userName);
message.setGetter(friend);
message.setContext(jtf.getText());
jtf.setText("
message.setTime(newDate().toString());
ObjectOutputStreamoos=newObjectOutputStream(ManageClientConServerThread.getClientConServerThread(userName).client.getOutputStream());
oos.writeObject(message);
}catch(Exceptione1){
e1.printStackTrace();
QqClientLogin类:
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPasswordField;
importjavax.swing.JTabbedPane;
importcom.qq.client.model.QqClientUser;
importcom.qq.client.tools.ManageQqFriendList;
*QQ客户端登入窗口
publicclassQqClientLoginextendsJFrameimplementsActionListener{
//定义北部组件
JLabeljbl1;
//定义中部组件:
其中中部组件有一个选项卡的窗口管理,有三个JPanel,一个文本框,一个密码框,4个JLabel,一个清除号码按钮,两个多选框
JTabbedPanejtp;
//选项卡窗口
JPaneljp2;
//QQ号码
JPaneljp3;
//手机号码
JPaneljp4;
//电子邮件
JLabeljp2_jpl1;
//QQ号码
JLabeljp2_jpl2;
//QQ密码
JLabeljp2_jpl3;
//忘记密码
JLabeljp2_jpl4;
//申请密码保护
JButtonjp2_jb1;
//清除号码
JTextFieldjp2_jtf;
//文本框
JPasswordFieldjp2_jpf;
//密码框
JCheckBoxjp2_jcb1;
//隐身登入
JCheckBoxjp2_jcb2;
//记住密码
//定义南部组件
JPaneljp1;
JButtonjp1_jb1;
//登入按钮
JButtonjp1_jb2;
//取消按钮
JButtonjp1_jb3;
//注册向导按钮
QqClientLoginqqClientLogin=newQqClientLogin();
publicQqClientLogin(){
//处理北部的组件
jbl1=newJLabel(newImageIcon("
image/beibu.gif"
));
//处理中部的组件
jp2=newJPanel(newGridLayout(3,3));
//把中部分成三行三列
jp2_jpl1=newJLabel("
QQ号码"
JLabel.CENTER);
jp2_jpl2=newJLabel("
QQ密码"
jp2_jpl3=newJLabel("
忘记密码"
jp2_jpl3.setForeground(Color.blue);
//把忘记密码设为蓝色
jp2_jpl4=newJLabel("
申请密码保护"
jp2_jb1=newJButton(newImageIcon("
image/clear.png"
jp2_jtf=newJTextField();
jp2_jpf=newJPasswordField();
jp2_jcb1=newJCheckBox("
隐身登入"
jp2_jcb2=newJCheckBox("
记住密码"
//把控件按照顺序加入到jp2
jp2.add(jp2_jpl1);
jp2.add(jp2_jtf);
jp2.add(jp2_jb1);
jp2.add(jp2_jpl2);
jp2.add(jp2_jpf);
jp2.add(jp2_jpl3);
jp2.add(jp2_jcb1);
jp2.add(jp2_jcb2);
jp2.add(jp2_jpl4);
//创建选项卡窗口,把三个JPanel放进去,最后把选项卡放进JFrame中
jtp=newJTabbedPane();
jtp.add("
jp2);
jp3=newJPanel();
手机号码"
jp3);
jp4=newJPanel();
电子邮件"
jp4);
//处理南部的组件
jp1=newJPanel();
jp1_jb1=newJButton(newImageIcon("
image/dengru.png"
jp1_jb1.addActionListener(this);
jp1_jb2=newJButton(newImageIcon("
image/quxiao.png"
jp1_jb3=newJButton(newImageIcon("
image/xiangdao.png"
//把三个按钮放进jp1中
jp1.add(jp1_jb1);
jp1.add(jp1_jb2);
jp1.add(jp1_jb3);
//把定义好的组件放入到JFrame中
this.add(jbl1,"
North"
//放入北部组件
this.add(jp1,"
//放入南部组件
this.add(jtp,"
//放入中部组件
//定义JFrame的一些属性
this.setSize(350,240);
this.setDefaultCl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山寨 QQ 顺平