`
haifeng0730
  • 浏览: 2194 次
社区版块
存档分类
最新评论

java socket实现群聊

阅读更多

服务器端主要是接收客户端发送过来的信息,并将该信息发给所有的客户端

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

/**
 * 	
 */
class Chat extends Thread {
	private Socket socket;
	private List<Socket> socketList;
	private int count;

	public Chat(int count, Socket socket, List<Socket> socketList) {
		this.count = count;
		this.socket = socket;
		this.socketList = socketList;
	}

	public void run() {
		BufferedReader reader = null;
		PrintWriter writer = null;
		try {
			reader = new BufferedReader(new InputStreamReader(
					socket.getInputStream()));

			String message = null;
			while (true) {
				message = reader.readLine();
				// 接收到客户端的bye信息,客户端即将退出,并将bye写入到该客户端
				if (message.equals("bye")) {
					writer = new PrintWriter(socket.getOutputStream());
					writer.println("bye");
					writer.flush();
					continue;
				}

				// 向所有的客户端发送接收到信息,实现群聊
				for (int i = 0; i < socketList.size(); i++) {
					writer = new PrintWriter(socketList.get(i)
							.getOutputStream());
					writer.println(count + " say: " + message);
					writer.flush();
				}

			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

public class ChatServer {

	/**
	 * Description
	 * 
	 * @param args
	 */
	public void startWork() throws IOException {
		ServerSocket serverSocket = new ServerSocket(2345);
		List<Socket> socketList = new ArrayList<Socket>();
		Socket socket = null;
		int count = 0;
		while (true) {
			socket = serverSocket.accept();
			count++;
			System.out.println(count + " clinet connected to the server!");
			// 将每一个连接到该服务器的客户端,加到List中
			socketList.add(socket);
			// 每一个连接到服务器的客户端,服务器开启一个新的线程来处理
			new Chat(count, socket, socketList).start();
		}
	}

	/**
	 * Description
	 * 
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		ChatServer chatServer = new ChatServer();
		chatServer.startWork();
	}

}

 客户端主要是两个类,一个是接收服务器端发送过来的信息,一个是向服务器发送客户端输入的信息

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 接受服务器信息
 */
class ReadMes extends Thread {
	private Socket socket;

	public ReadMes(Socket socket) {
		this.socket = socket;
	}

	public void run() {
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new InputStreamReader(
					socket.getInputStream()));
			String message = null;
			while (true) {
				message = reader.readLine();
				// 当读服务器信息线程接收到bye,该线程退出
				if (message.equals("bye")) {
					break;
				}
				System.out.println(message);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (reader != null) {
					reader.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

/**
 * 
 * 发送信息
 */
class SendMes extends Thread {
	private Socket socket;

	public SendMes(Socket socket) {
		this.socket = socket;
	}

	public void run() {
		BufferedReader input = null;
		PrintWriter writer = null;
		try {
			input = new BufferedReader(new InputStreamReader(System.in));
			writer = new PrintWriter(socket.getOutputStream());
			String message = null;
			while (true) {
				message = input.readLine();
				// 当输入bye客户端退出
				if (message.equals("bye")) {
					break;
				}
				// 向服务器端发送信息
				writer.println(message);
				writer.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (input != null) {
				try {
					input.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (writer != null) {
				writer.close();
			}
		}
	}
}

public class ChatClient {
	private String ipAdress;

	public ChatClient(String ipAString) {
		this.ipAdress = ipAdress;
	}

	public void startWork() throws UnknownHostException, IOException {
		Socket socket = new Socket(ipAdress, 2345);
		new ReadMes(socket).start();
		new SendMes(socket).start();
		

	}

	/**
	 * Description
	 * 
	 * @param args
	 * @throws UnknownHostException
	 * @throws IOException
	 */
	public static void main(String[] args) throws UnknownHostException,
			IOException {
		ChatClient chatClient = new ChatClient(args[0]);
		chatClient.startWork();
	}

}
分享到:
评论

相关推荐

    socket编程(实现群聊功能+界面清晰)

    本项目以"socket编程(实现群聊功能+界面清晰)"为主题,旨在创建一个支持多客户端实时交流的群聊系统,同时提供了图形用户界面(GUI)以提高用户体验。以下是关于这个项目的一些关键知识点和实现细节: 1. **...

    简单qq聊天(Java socket实现)

    在本项目中,"简单qq聊天(Java socket实现)"是一个使用Java编程语言构建的简易聊天应用程序,旨在模拟QQ的基本功能。它利用了Socket编程来实现实时的客户端-服务器通信,允许用户进行群聊、私聊以及状态更新。下面...

    java版socket编程实现局域网聊天和文件传送

    用java socket编写的局域网聊天和文件传送,类似飞秋,但没那么多功能,目前实现的功能有:聊天,发送窗口抖动,传送文件,其中传送文件采用TCP实现,其他的用UDP实现。本文件包含源代码和用到的jar包,代码结构清晰...

    java做的简单群聊

    【Java实现简单群聊系统详解】 在信息技术领域,开发一个基于Java的简单群聊系统是一项常见的练习,旨在提升开发者在网络编程、多线程以及数据交互等方面的能力。本项目主要涉及的技术栈包括Java语言基础、Socket...

    java利用Socket实现聊天工具

    该项目是我利用java和Socket实现的聊天工具,可以私聊和多人聊天。有选择作为服务端的端口号,和登录注销等功能。不是特别完善。因为是作为网络编程的大作业所以就没有去完善了,请多包涵,也希望能帮助到大家。

    使用Java后台,Socket方法实现android群聊(android服务端+java后台)

    在本文中,我们将深入探讨如何使用Java后台和Socket方法来实现Android群聊功能。这个解决方案涵盖了Android客户端的开发,以及Java后台服务器的构建。我们将会分析每个部分的关键知识点,并提供必要的代码片段以帮助...

    java swing实现群聊功能

    使用java swing,socket,多线程实现。 1) 客户端用来接收和展示数据,服务器实现与底层数据的交互。 2) 实现服务器端与客户端的分离,如果要操作数据库,可以在服务器端改代码调用Model。 3) 实现用户上线/下线...

    socket,多线程实现群聊

    运用多线程和socket实现群聊的功能,分为客户端和服务端

    java socket多人聊天(文字+图片+文件传输)

    本项目实现了基于Java Socket的多人聊天功能,包括群聊、私聊以及文本、图片和文件的发送与接收,提供了丰富的交互体验。 首先,我们要理解Socket的工作原理。Socket是网络通信的一种端点,它允许两个应用程序通过...

    socket单聊 群聊 发送文件

    在IT领域,网络编程是不可或缺的一部分,而Java的Socket编程则是实现网络通信的重要工具。本项目标题为"socket单聊 群聊 发送文件",这意味着它利用Java的Socket库构建了一个具备基本聊天功能的应用,包括一对一的单...

    java qq 源码 群聊

    Java QQ 源码分析与群聊实现 在IT行业中,Java是一种广泛使用的编程语言,尤其在构建网络应用和服务方面有着显著的地位。本篇将详细探讨如何使用Java Socket技术实现一个简单的QQ群聊功能。首先,我们要理解Java ...

    java 单聊群聊系统

    基于java socket 做的简单的聊天系统、简单实现了单聊群聊功能、、

    基于Java的群聊系统

    首先,Java Socket编程是实现客户端和服务器之间通信的基础。Socket是TCP/IP协议族的一部分,它为两台机器间的应用程序提供了一种建立和维护连接的方法,以及交换数据的机制。在群聊系统中,服务器端创建一个Socket...

    java_chatroom.rar_java socket _java socket 聊天_java 聊天

    Java Socket编程是网络通信的核心技术之一,主要用于实现两台计算机之间的数据传输。在这个"java_chatroom.rar"压缩包中,包含了一个基于Java Socket实现的简单聊天室应用,它由两个主要部分组成:客户端...

    关于java实现群聊和同步画图小结。

    在Java编程领域,实现群聊和同步画图是两个具有挑战性的任务,它们涉及到网络通信、多线程、图形用户界面(GUI)以及数据同步等多个关键知识点。这篇博客的作者通过分享自己的实践经验和代码示例,为我们揭示了如何...

    java socket+JFrame实现发送文件私聊群聊功能

    Java Socket和JFrame是...以上就是使用Java Socket和JFrame实现发送文件私聊群聊功能的基本思路和技术要点。实际项目中,还需要考虑到用户体验,如界面设计、错误提示、文件进度显示等功能,以提供更加友好的交互体验。

    基于Java Socket 通信实现的(图形界面)聊天室【100012620】

    可以实现群聊(聊天记录显示在所有客户端界面)。 完成好友列表在各个客户端上显示,包括头像和用户名。 可以实现私人聊天,用户可以选择某个其他用户,单独发送信息,同时实现了文件传输,还能发送窗口振动。 ...

    java实现群聊功能

    根据提供的文件信息,我们可以总结出以下关于如何使用Java实现群聊功能的知识点: ### Java实现群聊系统的关键组件 #### 服务器端(`ChatServer`类) 1. **初始化ServerSocket**: - 使用`ServerSocket`监听指定...

    用swing和socket实现的聊天室

    总结起来,"用swing和socket实现的聊天室"项目涵盖了Java GUI编程、网络编程以及数据库操作等多个核心概念。通过这个项目,开发者可以锻炼到客户端-服务器架构的实现,理解Socket通信的原理,以及如何利用数据库存储...

    socket群聊实例

    在这个“socket群聊实例”中,我们将探讨如何使用Java的Socket和ServerSocket类构建一个简单的多人聊天系统。 首先,服务器端的实现至关重要。`ServerSocket`类在Java中用于监听客户端的连接请求。你需要创建一个`...

Global site tag (gtag.js) - Google Analytics