最近模仿了QQ写了一个简单的QQ通信程序,下面讲讲思路和一些相关代码。
思路:首先要创建一个服务器和客户端,客服端将信息和接收对象发送给服务器端。服务器然后通过接收对象找到相对应的另外一个客户端,并将相应的信息发送到该客户端。主要用到的知识是socket编程,数据库,io流等。
一.创建一个服务器,接收请求链接的客户端,当接收到一个客户端后就启动一个聊天线程。
public void creatServer(int port) { // 创建服务器 ServerSocket sever; try { sever = new ServerSocket(port); System.out.println("服务器已启动,等待客户端。。。"); while (true) { // 监听获取客户端对象 Socket client = sever.accept(); new ChatThread(client).start(); System.out.println("进入客户端:" + client.getPort()); } } catch (IOException e) { e.printStackTrace(); } }
二.创建一个客户端,并请求链接服务器
public void connetServer() { boolean bool = false; try { Socket client = new Socket("localhost", 4040); // 获取输入输出流对象 InputStream in = client.getInputStream(); br = new BufferedReader(new InputStreamReader(in)); out = client.getOutputStream(); sendMsgToServer(name);// 发送用户名 sendMsgToServer(pwd);// 发送密码 } catch (Exception e) { e.printStackTrace(); } }
三.聊天线程的创建
public class ChatThread extends Thread { private Socket client; OutputStream out; InputStream in; String username, password, username2; public void run() { try { chat(); } catch (Exception e) { e.printStackTrace(); } } // 构造方法 public ChatThread(Socket client) { this.client = client; } // 获取线程对应的客户名 public String getUsername() { return username; } // 发送信息的方法 public void sendMsg(String message) { try { out.write((message + "\r\n").getBytes()); } catch (IOException e) { e.printStackTrace(); } } // 聊天方法 public void chat() throws Exception { // 获取客户端输入输出流 in = client.getInputStream(); out = client.getOutputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); username = br.readLine(); username2 = br.readLine(); System.out.println(username + "-----" + password); ChatTool.addUser(this); String msg = br.readLine(); //当客户端没有说bye并且msg不为空时继续聊 while (!"bye".equalsIgnoreCase(msg) && msg != null) { System.out.println(msg); ChatTool.sendMsgToOne(username, username2, msg); msg = br.readLine(); } if (msg == null) { ChatTool.moveUser(username); } // 关闭客户端 client.close(); } }
四.聊天处理方法
public class ChatTool { public static List<ChatThread> userlist = new ArrayList<ChatThread>(); // 添加客户线程对象到队列 public static void addUser(ChatThread ct) { userlist.add(ct); } // 从队列移除客户线程对象 public static void moveUser(String username) { for (int i = 0; i < userlist.size(); i++) { ChatThread ct = userlist.get(i); if (ct.getUsername().equals(username)) userlist.remove(i); } } // 群发信息 public static void sendMsgToAll(String username, String msg) { for (int i = 0; i < userlist.size(); i++) { ChatThread ct = userlist.get(i); ct.sendMsg(username + "说:" + "\r\n" + msg); } } // 单聊 public static void sendMsgToOne(String username, String username2, String msg) { for (int i = 0; i < userlist.size(); i++) { ChatThread ct = userlist.get(i); if (ct.getUsername().equals(username2)) ct.sendMsg(msg); } } }
相关推荐
java版山寨QQ项目 里面有四个压缩包 QQ服务器端.rar QQ客户端.rar 改进QQ客户机服务器视频实现.rar Q第三方库.rar 这个java版山寨QQ项目实现的功能有: 1.实现的java视频聊天; 2.集成了Mina框架; 3.服务器管理...
这个山寨QQ代码2000行,基于现在可以使用IP6,给出它的设计原理 功能:山寨QQ 主要行为: ①用户注册 ②添加好友 ③好友上线头像变为彩色 ④在线上的好友头像是彩色,不在线上的好友头像是灰色,动态变化 ⑤独立窗口...
山寨版qq源码素材山寨版qq源码+素材山寨版qq源码+素材山寨版qq源码+素材
山寨版QQ 源代码 QQ2010界面 用JAVA编写 韩顺平JAVA教程视频配套源代码
韩顺平java视频案例(山寨版QQ)源代码.doc
③给出的源码并没有实现山寨qq全部功能,这个在视频教程中已经提到了,其余功能大家完全可以在学习完视频教程后,自行完成。 ④该项目没有使用到数据库. ⑤关于qq的在线添加用户、离线留言、在线传递文件、视频聊天...
java实现的山寨版qq,界面美观,可以实现登陆,在线好友列表显示,任意一对一聊天,以及所有在线人多对多聊天。
韩顺平老师课程所讲的山寨版QQ源代码,非常适合学习
Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。...
Java编写的山寨QQ源代码,运用了多线程,GUI,IO等等,
韩顺平的山寨版qq源码和素材,全部的,和网上韩顺平《循序渐进学java》课程同步配套。
山寨版QQ2003 java源代码 其中,所用到的IDE为MyEclipse 数据库为SqlServer2000 这个只做参考,有很多功能可以自己实现
这是我在学习韩顺平视频中的山寨QQ时照着上面的代码敲的工程,只可惜在最后一步有点bug(不能正常显示好友在线或离线)实在是没找出来,希望有兴趣的朋友下载下来看看,若能纠正就更好了(最好把修正的部分通知我一下...
自己用java 写的山寨QQ 请多多指教
首先是关于[评价可免费]的严正声明 一、评价=评论加评价(评星星) 二、评价必须是下载完了该资源后的评价,没下载评价无效 三、如果正确评价了,返还积分可能需要等一会,因为系统需要反应。 评论时记得要评分。...
韩顺平山寨版qq源码+素材
韩顺平坦克大战、满汉全席、山寨QQ源 部分ppt及学习笔记
模仿山寨QQ java设计
里面包含Java山寨版qq源码+素材。基本上可以简单的实现聊天功能,对Java的学习还是很有帮助的。