【Java小项目】山寨QQ
2015-11-12 20:38
435 查看
最近看着韩顺平老师的视频加上百度谷歌做了这个小玩意。
主要功能:
服务器端:
1.选择监听端口
2.打印服务器日志
3.查看在线用户(强制下线没做)
客户端:
1.登陆的密码我写死到程序里了(密码是一个空格)
2.三个分组可切换
3.可多对多聊天
4.A找B好友聊天时,若B好友没有打开与A聊天的界面,则B与A聊天的界面会直接弹出
5.可以选择要链接的服务器的地址和端口
6.上线,下线好友头像会有相应变化
思路:
服务器和客户端用ObjectOutputStream,ObjectInputStream 进行通信,把数据包封装到类里(User,Message)。
服务器端:
1.点击启动服务器时启动一个线程来监听端口
2.监听到登陆,如果登陆成功就在启动一个线程来维持与该Socket的通信
1.用填写的信息登陆,若成功的话就启动一个线程来负责该客户端与服务器端之间的通信。
完整代码:
CSDN下载上传了但是刷不出来啊
GitHub地址:https://github.com/zhang-tiancheng/qq-little_copycat
主要功能:
服务器端:
1.选择监听端口
2.打印服务器日志
3.查看在线用户(强制下线没做)
客户端:
1.登陆的密码我写死到程序里了(密码是一个空格)
2.三个分组可切换
3.可多对多聊天
4.A找B好友聊天时,若B好友没有打开与A聊天的界面,则B与A聊天的界面会直接弹出
5.可以选择要链接的服务器的地址和端口
6.上线,下线好友头像会有相应变化
思路:
服务器和客户端用ObjectOutputStream,ObjectInputStream 进行通信,把数据包封装到类里(User,Message)。
服务器端:
1.点击启动服务器时启动一个线程来监听端口
public void run(){ try { while(true) { Socket s = ss.accept(); ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); User u = (User) ois.readObject(); System.out.println("收到UserName:" + u.getUserName() + " PassWard:" + u.getPassWard()); Message m = new Message(); ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream()); if (u.getPassWard().equals(" ")) { display.di.showLog("用户名:"+u.getUserName() + " 登陆成功!密码:" + u.getPassWard()); m.setType("success"); oos.writeObject(m); //启动一个线程来服务 myThread mythread=new myThread(s,oos,ois); mythread.start(); threadManger.addThread(u.getUserName(),mythread); threadManger.friendAlert(); } else { display.di.showLog("用户名:"+u.getUserName() + " 登陆失败!密码:" + u.getPassWard()); m.setType("failed"); oos.writeObject(m); oos.close(); } } }catch(IOException e){ e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); } }
2.监听到登陆,如果登陆成功就在启动一个线程来维持与该Socket的通信
public void run(){ try { while(true) { Message m = (Message)ois.readObject(); if(m.getType().equals("sendMsg")) { System.out.println(s + m.getSender() + " 对 " + m.getGetter() + " 说:" + m.getMsg()); display.di.showLog(s.getInetAddress()+" : "+m.getSender() + " 对 " + m.getGetter() + " 说:" + m.getMsg()); //转发 myThread fri = threadManger.getThread(m.getGetter()); fri.oos.writeObject(m); }else if(m.getType().equals("LoginOut")){ display.di.showLog(m.getSender()+"下线!"); threadManger.delThread(m.getSender()); threadManger.friendAlert(); System.out.println(m.getSender()+" loginOut!"); } } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } }客户端:
1.用填写的信息登陆,若成功的话就启动一个线程来负责该客户端与服务器端之间的通信。
public void run(){ try { while(true) { Message m = (Message)clientUser.getOIS().readObject(); if(m.getType().equals("sendMsg")) { System.out.println(m.getSender() + " say to " + m.getGetter() + " with " + m.getMsg()); //已经打开聊天界面 if(chatManger.Getchat(m.getGetter() + "_" + m.getSender())!=null) { chat ch = chatManger.Getchat(m.getGetter() + "_" + m.getSender()); ch.ShowMsg(m.getSender() + " : " + m.getMsg()); }else{ chat ch=new chat(m.getGetter(),m.getSender()); chatManger.Addchat(m.getGetter()+"_"+m.getSender(),ch); ch.ShowMsg(m.getSender() + " : " + m.getMsg()); } }else if(m.getType().equals("getFriend")){ //好友列表 Object[] l=m.getFriList(); System.out.println(m.getType()+" "+l.length); listManger.getMainL().changeList(l); } } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } }
完整代码:
CSDN下载上传了但是刷不出来啊
GitHub地址:https://github.com/zhang-tiancheng/qq-little_copycat
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- [Android]在代码里运行另一个程序的方法
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序