`

山寨QQ

    博客分类:
  • java
QQ 
阅读更多

    最近模仿了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聊天工具设计

    【Java实习报告——山寨QQ聊天工具设计】 这份实习报告详细记录了一个基于Java的简易聊天系统的开发过程,项目名为"My_QQ",旨在模仿QQ的基本功能,包括登录、注册、单人及多人聊天,并且退出应用。这个项目是针对...

    山寨版QQ 源代码 QQ2010界面

    标题中的“山寨版QQ 源代码 QQ2010界面”指的是一个非官方的、模仿QQ2010版本用户界面的软件项目,它的源代码是使用Java编程语言编写的。这个项目可能是为了教学目的,如描述中提到的“韩顺平JAVA教程视频配套源代码...

    山寨qq客户端.zip_qq聊天源码_山寨qq聊天

    这个"山寨qq客户端.zip"压缩包包含了一个模仿QQ聊天功能的项目,该项目由客户端和服务器端的Java源码组成,能够支持一对一以及一对多的聊天模式。 首先,我们要理解的是即时通讯(Instant Messaging,简称IM)的...

    java版山寨QQ项目源码

    java版山寨QQ项目 里面有四个压缩包 QQ服务器端.rar QQ客户端.rar 改进QQ客户机服务器视频实现.rar Q第三方库.rar 这个java版山寨QQ项目实现的功能有: 1.实现的java视频聊天; 2.集成了Mina框架; 3.服务器管理...

    JavaFX山寨QQ2016

    "JavaFX山寨QQ2016"项目显然是一个基于JavaFX技术模仿腾讯QQ设计的即时通讯应用,旨在提供类似的功能和用户体验。 首先,让我们深入了解一下JavaFX的核心特点: 1. **富图形界面**:JavaFX支持CSS样式,可以创建出...

    java语言 山寨版QQ源码

    【标题】:“java语言 山寨版QQ源码”指的是基于Java编程语言实现的一个简易QQ聊天软件的源代码。这个项目通常是为了教学目的而设计,让学习者能够深入理解Java编程语言在网络通信、多线程、图形用户界面(GUI)等...

    韩顺平山寨qq项目原码

    【标题】"韩顺平山寨qq项目原码"是一个基于Java编程语言的项目,旨在模拟QQ即时通讯软件的基本功能。这个项目可能是为了教学目的而创建的,帮助学习者理解网络编程、多线程以及客户端-服务器通信等核心概念。 ...

    java实现的山寨版QQ

    【Java实现的山寨版QQ】项目是一个基于Java编程语言开发的即时通讯软件,它旨在模拟腾讯QQ的基本功能,包括用户登录、在线好友列表展示、一对一私聊以及多人聊天室等功能。这个项目对于学习Java GUI设计、网络编程...

    山寨QQ聊天工具

    【标题】"山寨QQ聊天工具"揭示了网络编程的核心概念,是学习这一领域的宝贵资源。这个项目可能是对QQ即时通讯软件的一种仿制实现,旨在帮助初学者理解和掌握网络通信的基本原理和技术。 网络编程是计算机科学中的一...

    山寨版qq源码+素材

    山寨版qq源码素材山寨版qq源码+素材山寨版qq源码+素材山寨版qq源码+素材

    韩顺平山寨版qq源码.素材

    2. **软件工程**:山寨QQ源码作为一个完整的项目,会涉及到软件开发的各个阶段,包括需求分析、设计、编码、测试和维护。这要求开发者具备一定的软件工程知识,能够按照规范编写代码,并理解软件生命周期的各个阶段...

    山寨QQ2003java源码

    【标题】"山寨QQ2003java源码"揭示了这是一个基于Java编程语言的项目,目的是模仿QQ2003版本的某些功能。在Java领域,源码是程序员编写的程序原始代码,用于实现特定的功能。这个项目可能是为了学习、研究或者改进,...

    山寨版QQ2010

    【山寨版QQ2010】是一个在2010年期间分析QQ协议后开发的简易即时通讯(IM)客户端。这个项目旨在模仿QQ的功能,尤其是2009至2010年的协议版本,允许用户登录并发送消息。然而,由于当时开发者并未实现文件传输功能,...

    java山寨版qq项目

    【Java山寨版QQ项目】是韩顺平老师为了教学目的设计的一个模拟QQ功能的应用程序,旨在帮助初学者理解和掌握Java编程语言以及相关的软件开发技术。这个项目提供了从基础到进阶的Java编程实践,涵盖了网络通信、多线程...

    Java编写的山寨QQ源代码

    在这个项目中,我们讨论的是一个"Java编写的山寨QQ源代码",它是一个学习和理解Java技术如何应用于即时通讯软件开发的实例。这个项目涉及到的关键知识点包括多线程、图形用户界面(GUI)以及输入/输出(I/O)操作。 ...

    山寨QQ源码_素材

    【标题】"山寨QQ源码_素材"是一个与QQ客户端类似的应用程序的源代码集合,主要面向编程初学者和有经验的开发者,他们可能对学习即时通讯应用的开发原理和实现方式感兴趣。这个资源可能包含了一个简易版的QQ聊天软件...

    韩顺平山寨版qq源码+素材

    QQ,作为中国最知名的即时通讯软件之一,其背后的技术架构和源码对于许多IT开发者来说具有极高的学习价值。韩顺平老师的“山寨版QQ源码+素材”提供了一个了解和学习QQ基本功能实现的平台,这对于初学者或希望深入...

Global site tag (gtag.js) - Google Analytics