服务器端主要是接收客户端发送过来的信息,并将该信息发给所有的客户端
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编程(实现群聊功能+界面清晰)"为主题,旨在创建一个支持多客户端实时交流的群聊系统,同时提供了图形用户界面(GUI)以提高用户体验。以下是关于这个项目的一些关键知识点和实现细节: 1. **...
在本项目中,"简单qq聊天(Java socket实现)"是一个使用Java编程语言构建的简易聊天应用程序,旨在模拟QQ的基本功能。它利用了Socket编程来实现实时的客户端-服务器通信,允许用户进行群聊、私聊以及状态更新。下面...
用java socket编写的局域网聊天和文件传送,类似飞秋,但没那么多功能,目前实现的功能有:聊天,发送窗口抖动,传送文件,其中传送文件采用TCP实现,其他的用UDP实现。本文件包含源代码和用到的jar包,代码结构清晰...
【Java实现简单群聊系统详解】 在信息技术领域,开发一个基于Java的简单群聊系统是一项常见的练习,旨在提升开发者在网络编程、多线程以及数据交互等方面的能力。本项目主要涉及的技术栈包括Java语言基础、Socket...
该项目是我利用java和Socket实现的聊天工具,可以私聊和多人聊天。有选择作为服务端的端口号,和登录注销等功能。不是特别完善。因为是作为网络编程的大作业所以就没有去完善了,请多包涵,也希望能帮助到大家。
在本文中,我们将深入探讨如何使用Java后台和Socket方法来实现Android群聊功能。这个解决方案涵盖了Android客户端的开发,以及Java后台服务器的构建。我们将会分析每个部分的关键知识点,并提供必要的代码片段以帮助...
使用java swing,socket,多线程实现。 1) 客户端用来接收和展示数据,服务器实现与底层数据的交互。 2) 实现服务器端与客户端的分离,如果要操作数据库,可以在服务器端改代码调用Model。 3) 实现用户上线/下线...
运用多线程和socket实现群聊的功能,分为客户端和服务端
本项目实现了基于Java Socket的多人聊天功能,包括群聊、私聊以及文本、图片和文件的发送与接收,提供了丰富的交互体验。 首先,我们要理解Socket的工作原理。Socket是网络通信的一种端点,它允许两个应用程序通过...
在IT领域,网络编程是不可或缺的一部分,而Java的Socket编程则是实现网络通信的重要工具。本项目标题为"socket单聊 群聊 发送文件",这意味着它利用Java的Socket库构建了一个具备基本聊天功能的应用,包括一对一的单...
Java QQ 源码分析与群聊实现 在IT行业中,Java是一种广泛使用的编程语言,尤其在构建网络应用和服务方面有着显著的地位。本篇将详细探讨如何使用Java Socket技术实现一个简单的QQ群聊功能。首先,我们要理解Java ...
基于java socket 做的简单的聊天系统、简单实现了单聊群聊功能、、
首先,Java Socket编程是实现客户端和服务器之间通信的基础。Socket是TCP/IP协议族的一部分,它为两台机器间的应用程序提供了一种建立和维护连接的方法,以及交换数据的机制。在群聊系统中,服务器端创建一个Socket...
Java Socket编程是网络通信的核心技术之一,主要用于实现两台计算机之间的数据传输。在这个"java_chatroom.rar"压缩包中,包含了一个基于Java Socket实现的简单聊天室应用,它由两个主要部分组成:客户端...
在Java编程领域,实现群聊和同步画图是两个具有挑战性的任务,它们涉及到网络通信、多线程、图形用户界面(GUI)以及数据同步等多个关键知识点。这篇博客的作者通过分享自己的实践经验和代码示例,为我们揭示了如何...
Java Socket和JFrame是...以上就是使用Java Socket和JFrame实现发送文件私聊群聊功能的基本思路和技术要点。实际项目中,还需要考虑到用户体验,如界面设计、错误提示、文件进度显示等功能,以提供更加友好的交互体验。
可以实现群聊(聊天记录显示在所有客户端界面)。 完成好友列表在各个客户端上显示,包括头像和用户名。 可以实现私人聊天,用户可以选择某个其他用户,单独发送信息,同时实现了文件传输,还能发送窗口振动。 ...
根据提供的文件信息,我们可以总结出以下关于如何使用Java实现群聊功能的知识点: ### Java实现群聊系统的关键组件 #### 服务器端(`ChatServer`类) 1. **初始化ServerSocket**: - 使用`ServerSocket`监听指定...
总结起来,"用swing和socket实现的聊天室"项目涵盖了Java GUI编程、网络编程以及数据库操作等多个核心概念。通过这个项目,开发者可以锻炼到客户端-服务器架构的实现,理解Socket通信的原理,以及如何利用数据库存储...
在这个“socket群聊实例”中,我们将探讨如何使用Java的Socket和ServerSocket类构建一个简单的多人聊天系统。 首先,服务器端的实现至关重要。`ServerSocket`类在Java中用于监听客户端的连接请求。你需要创建一个`...