聊天室/服务器/客户端/线程

这是一个使用Java实现的简单聊天室示例,包括服务器端和客户端代码。服务器端通过`ServerSocket`监听9999端口,接受客户端连接,并将连接的`Socket`加入到成员列表。读取客户端消息的线程会展示来自客户端的昵称和内容。客户端通过`Socket`连接到服务器,设置昵称并不断读取输入,将输入内容发送到服务器。服务器接收到消息后广播给所有在线成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务器端

public class ChatRoomServer {

// 聊天室中的成员

static List<Socket> socketList = new ArrayList<>();

public static void main(String[] args) throws IOException {

ServerSocket serverSocket = new ServerSocket(9999);

Socket socket = serverSocket.accept(); // 等待客户端连接

socketList.add(socket); // 将新连接的socket存入集合

System.out.println(socket.getInetAddress() + "上线了...");

System.out.println(socketList);

}

// 读取&展示消息的线程

static class ReadMsgThread implements Runnable {

private Socket socket ;

public ReadMsgThread(Socket socket) {

this.socket = socket;

}

@Override

public void run() {

try {

boolean flag = true;

while (true) {

// 接收成员发送的消息

//获取输入流 读取消息

InputStream in = socket.getInputStream();

byte[] bytes = new byte[1024];

int read = in.read(bytes);

// 张三&你好

String msg = new String(bytes , 0 ,read);

// 解析

String[] split = msg.split("&");

String nickName = split[0]; // 昵称

String content = split[1]; // 要发送的内容

if (flag){

System.out.println(nickName + "上线了...");

flag = false;

}

System.out.println(nickName + "说:" + content);

}

} catch (Exception e) {

// e.printStackTrace();

}

}

}

客户端

public static void main(String[] args) throws IOException {

Socket socket = new Socket("localhost", 9999);

// 启动接收 服务端 群发消息的线程

new Thread( new ReadServerMsg(socket)).start();

Scanner sc = new Scanner(System.in);

System.out.println("请设置您的昵称:");

String nickName = sc.next() ;

while (true){

OutputStream out = socket.getOutputStream();

System.out.println("请输入您要发送的内容:");

String content = sc.next();

// 打包信息 昵称 与 内容 使用 & 连接

// 张三&你好

String msg = nickName + "&" + content ;

out.write(msg.getBytes());

}

}

static class ReadServerMsg implements Runnable{

private Socket socket ;

public ReadServerMsg(Socket socket) {

this.socket = socket;

}

@Override

public void run() {

try{

while (true){

InputStream in = socket.getInputStream();

byte[] bytes = new byte[1024];

int read = in.read(bytes);

String msg = new String(bytes , 0 , read);

System.out.println("server:" + msg);

}

}catch (Exception e ){

}

}

}

}

————————————————

版权声明:本文为优快云博主「KEY798177」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.youkuaiyun.com/KEY798/article/details/128807645

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值