`
郑云飞
  • 浏览: 818331 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java聊天室

阅读更多
package moreChat;
import java.io.*;
import java.net.Socket;
import java.util.concurrent.*;
public class ChatClient
{
	private static final int	   PORT = 8888;
	private static ExecutorService exec = Executors.newCachedThreadPool();
	public ChatClient()
	{
		try
		{
			Socket socket = new Socket("localhost", PORT);
			exec.execute(new Sender(socket));
			System.out.println("[" + socket.getInetAddress() + "]您好,欢迎来到郑云飞聊天室!");
			BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String msg;
			while ((msg = br.readLine()) != null)
			{
				System.out.println(msg);
			}
		} 
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
	/**
	 * 客户端线程获取控制台输入消息
	 */
	static class Sender implements Runnable
	{
		private Socket socket;

		public Sender(Socket socket)
		{
			this.socket = socket;
		}
		public void run()
		{
			try
			{
				BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
				PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
				String msg;
				while(true)
				{
					msg = br.readLine();
					pw.println(msg);
					if (msg.trim().equals("bye"))
					{
						pw.close();
						br.close();
						exec.shutdownNow();
						break;
					}
				}
			} 
			catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) throws Exception
	{
		new ChatClient();
	}
}

 

package moreChat;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.*;
public class ChatServer
{
	private static final int	PORT = 8888;				   // 端口号
	private static List<Socket> list = new ArrayList<Socket>(); // 保存连接对象
	private ExecutorService	 exec;
	private ServerSocket		server;
	public ChatServer()
	{
		try
		{
			server = new ServerSocket(PORT);
			exec = Executors.newCachedThreadPool();
			System.out.println("服务器已启动!");
			Socket client = null;
			while (true)
			{
				client = server.accept(); // 接收客户连接
				list.add(client);
				exec.execute(new ChatTask(client));
			}
		} 
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	static class ChatTask implements Runnable
	{
		private Socket		 socket;
		private BufferedReader br;
		private PrintWriter	pw;
		private String		 msg;

		public ChatTask(Socket socket) throws IOException
		{
			this.socket = socket;
			br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			msg = "[" + this.socket.getInetAddress() + "]进入聊天室!当前聊天室有["+ list.size() + "]人";
			sendMessage();
		}
		public void run()
		{
			try
			{
				while ((msg = br.readLine()) != null)
				{
					if (msg.trim().equals("bye"))
					{
						list.remove(socket);
						br.close();
						pw.close();
						msg = "[" + socket.getInetAddress() + "]离开聊天室!当前聊天室有["+ list.size() + "]人";
						socket.close();
						sendMessage();
						break;
					} 
					else
					{
						msg = "[" + socket.getInetAddress() + "]说:" + msg;
						sendMessage();
					}
				}
			} 
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		/**
		 * 群发消息给聊天室的所有人
		 */
		private void sendMessage() throws IOException
		{
			System.out.println(msg);
			for (Socket client : list)
			{
				pw = new PrintWriter(client.getOutputStream(), true);
				pw.println(msg);
			}
		}
	}

	public static void main(String[] args)
	{
		new ChatServer();
	}

}

 

分享到:
评论
1 楼 any_bye 2011-12-01  

相关推荐

    java聊天室(绝对经典)

    "java聊天室(绝对经典)"这个项目包含了三种不同风格的聊天室实现,每种都有其独特的编程思想和效果。通过学习这些示例,你可以增强自己的Java编程技能,并理解如何构建实时通信系统。 首先,我们要了解Java聊天室...

    java聊天室,聊天室

    【Java聊天室】是一个基于Java编程语言开发的实时通信应用,它使用了AWT(Abstract Window Toolkit)库来构建用户界面,并通过多线程技术实现并发处理,支持多人群聊功能。这个项目对于初学者来说,是理解Java编程、...

    java毕业设计——Java聊天室的设计与实现(论文+开题报告+答辩PPT+源代码+数据库+讲解视频).zip

    java毕业设计——Java聊天室的设计与实现(论文+开题报告+答辩PPT+源代码+数据库+讲解视频).zip java毕业设计——Java聊天室的设计与实现(论文+开题报告+答辩PPT+源代码+数据库+讲解视频).zip java毕业设计——...

    java聊天室技术分析

    ### Java聊天室技术分析 #### 一、引言 随着互联网技术的发展,实时通信成为了一个重要的应用场景,尤其是在社交网络和在线协作工具中。聊天室作为实时通信的一种常见形式,其技术实现方式也在不断地进步和演变。...

    java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java

    java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java 聊天室代码java ...

    java聊天室.java聊天室.java聊天室.java聊天室.java聊天室

    java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室.java聊天室....

    Java聊天室程序源码(毕业设计)

    Java聊天室程序源码 2 需求分析 2.1 业务需求 1. 与聊天室成员一起聊天。 2. 可以与聊天室成员私聊。 3. 可以改变聊天内容风格。 4. 用户注册(含头像)、登录。 5. 服务器监控聊天内容。 6. 服务器过滤非法内容。 7...

    Java聊天室(界面完整,群聊,私聊,用户列表)

    Java聊天室是一个基于Java编程语言实现的实时通讯应用,它具备完整的用户界面,支持群聊和私聊功能,并且能够显示在线用户列表。这个项目利用了Socket编程来实现实时的数据传输,为用户提供了一个交互性强、功能丰富...

    Java聊天室_javasocket_java聊天_聊天室_

    Java聊天室是一个基于Java Socket编程实现的交互式通信应用,主要功能包括用户登录、私人聊天、群组聊天、发送图片以及发送抖动等。这个项目不仅涵盖了基础的网络编程概念,还涉及到图形用户界面(GUI)的设计,为...

    Java聊天室

    【Java聊天室】项目是一个基于Java技术实现的实时通信应用,它允许用户通过网络进行文本、文件甚至语音的交流。这个项目涵盖了多个重要的Java编程和网络通信知识点,非常适合初学者和进阶者来深入理解Java在网络编程...

    Java聊天室程序

    Java聊天室程序是一种基于Java技术实现的网络通信应用,它为用户提供了一个互动交流的平台,具备多种特性以满足用户的基本聊天需求。在这个程序中,开发者利用了Java的强大网络编程能力,构建了一个稳定、高效的聊天...

    java 聊天室java 聊天室

    java 聊天室java 聊天室java 聊天室java 聊天室

    java聊天室源码,java聊天室下载

    Java聊天室源码是学习和理解网络编程及多线程技术的理想实践项目。在这个项目中,我们主要关注两个核心文件:`TestServer.java`和`TestClient.java`,它们分别代表了聊天室的服务器端和客户端。 首先,让我们深入...

    java聊天室.

    Java聊天室是一个基于Java技术实现的多人实时通信系统,它允许用户通过网络进行文本、音频或视频交流。在本文中,我们将深入探讨Java聊天室的关键技术和实现细节。 首先,Java聊天室的核心是网络编程,主要涉及到...

    java 聊天室登录界面

    java 聊天室登录界面

    Java聊天室课程设计源码和文档附SQLServer数据库.rar

    附SQLServer数据库的Java聊天室课程设计源码和文档,源代码完整,学习网络编程很不错的参考程序。界面像网页版 的聊天室,可对所有人发消息,聊天室的功能都基本具备了。源代码文件包括了:聊天系统登录程序、聊天...

    java聊天室系统相当经典的聊天室

    Java聊天室系统是一种基于C/S(Client/Server)模式的多用户交互平台,它允许用户在不同的计算机上进行实时通信。这个系统具有丰富的功能,包括群聊、私聊、清屏、显示时钟、设置字体颜色、使用表情、聊天室管理(如...

    JAVA聊天室完整代码

    Java聊天室是一个典型的网络编程项目,它涉及到许多关键的Java技术,特别适合初学者学习和实践。在这个项目中,我们将探讨以下知识点: 1. **Java网络编程基础**:Java提供了丰富的API来支持网络编程,包括Socket和...

Global site tag (gtag.js) - Google Analytics