微Chat(多线程聊天室)

本文介绍了一个简单的聊天室系统的实现过程,包括服务端和客户端的基本设置、消息收发机制及线程池的应用。服务端作为消息转发中心,客户端通过特定端口建立连接并利用线程进行消息的发送和接收。

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

实现聊天室需要具备的知识和用到的API:

端口号:一个应用程序对应一个端口号,比如http服务器的默认端口号80,tomcat服务器默认端口号为8080.数据库服务器的默认端口号为3306。

服务端:

创建一个Socket

ServerSocket serverSocket = new  ServerSocket("127.0.0.1",6666);

阻塞直到有客户端连接,返回一客户端的Socket对象。

Socket client = serverSocket.accept();

客户端:

建立和服务端的连接:

Socket socket = new Socket("127.0.0.1", 6666);

当客户端和服务器之间建立连接之后,关系如下

发送消息:

所有的 getInputStream ( ) 用于读取消息的管道

所有的 getOutputStream()用于发送消息的管道

PrintStream用于发送消息。

Scanner用于读取消息。

注意发送消息要使用println,同时读取消息要使用readLine();

 

线程池:

用于一次创建多个线程,每个线程都会监听一个客户端的连接。相当于一个服务器创建了多个管道,每个管道都对应一个和客户端的连接。当有客户端连接的时候这个管道就由堵塞变成畅通了。

 

Swing的基础知识。

运行截图:

 

群聊:

 

私聊:

其中客户端发送消息和接收消息使用了两个不同的线程。

服务端只是作为一个转发消息的作用。

当某个客户端发送username:tom的时候,服务端会分配一个和客户端的连接,并给客户端分配一个Socket,一个用户对应一个Socket,并存储到HashMap中。

当某个客户端发送G:hello every one,服务端会转发给所有的客户端。

当某个客户端发送P:tom-hello tom的时候,服务端会只转发消息给tom这个socket,如果tom不在线,会提示tom不在线。

当某个客户端发送bye的时候,服务端会从HashMap中删除这个客户端。

点击相应按钮自动给消息加上前缀。

 

关注微信公众号AI技术,回复 “聊天室” 获取项目源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值