java利用Socket实现聊天室功能实例
发布时间 - 2026-01-10 22:54:25 点击率:次最近研究了下Java socket通信基础,利用代码实现了一个简单的多人聊天室功能,现把代码共享下,希望能帮到有兴趣了解的人。

目录结构:
ChatClient:
package com.panda.chat;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
@SuppressWarnings("serial")
public class ChatClient extends Frame {
private TextArea ta = new TextArea();
private TextField tf = new TextField();
private DataOutputStream dos = null;
private DataInputStream dis = null;
private Socket socket = null;
private boolean bConnected = false;
private Thread thread=null;
public static void main(String[] args) {
new ChatClient().frameClient();
}
public void frameClient(){
setSize(400, 400);
setLocation(400,300);
add(ta,BorderLayout.NORTH);
add(tf,BorderLayout.SOUTH);
pack();
tf.addActionListener(new TfListener());
//关闭窗口事件监听
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
disconnected();
System.exit(0);
}
});
this.connect();
setVisible(true);
}
//链接服务器地址
private void connect(){
try {
socket = new Socket("127.0.0.1", 8888);
thread=new Thread(new ChatThread());
thread.start();
dos = new DataOutputStream(socket.getOutputStream());
dis = new DataInputStream(socket.getInputStream());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//断开连接
private void disconnected(){
bConnected = false;
try {
dos.close();
dis.close();
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//键盘回车事件
private class TfListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String strMsg = tf.getText();
tf.setText("");
try {
dos.writeUTF(strMsg);
dos.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
//开启线程接受服务器信息
private class ChatThread implements Runnable{
@Override
public void run() {
try {
bConnected = true;
while(bConnected){
String msg = dis.readUTF();
String taText = ta.getText();
ta.setText(taText+msg+"\n");
}
} catch (SocketException e) {
System.out.println("退出");;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ChatServer:
package com.panda.chat;
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
private boolean started = false;
private List<ChatThread> chatThreads = new ArrayList<ChatThread>();
public static void main(String[] args) {
new ChatServer().startServer();
}
private void startServer(){
try {
//开启服务端Socket
ServerSocket seso = new ServerSocket(8888);
started = true;
while(started){
//接受客户端连接请求
Socket sos = seso.accept();
System.out.println("一个客户端已连接");
//开启线程处理客户端通信
ChatThread ct = new ChatThread(sos);
chatThreads.add(ct);
new Thread(ct).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
private class ChatThread implements Runnable{
private Socket socket;
private DataInputStream din=null;
private DataOutputStream don=null;
private boolean bConnected = false;
public ChatThread(Socket socket) {
super();
this.socket = socket;
}
//发送信息的函数
private void send(String strMsgIn){
try{
don.writeUTF(strMsgIn);
don.flush();
}catch(IOException e){
e.printStackTrace();
}
}
@Override
public void run() {
try{
din = new DataInputStream(socket.getInputStream());
don = new DataOutputStream(socket.getOutputStream());
//读取数据
bConnected = true;
while(bConnected){
String strMsgIn = din.readUTF();
System.out.println(strMsgIn);
//接收到数据后发送给每个客户端
for(int i =0;i<chatThreads.size();i++){
chatThreads.get(i).send(strMsgIn);
}
}
}catch (IOException e) {
try {
//如果客户端出错或关闭,直接关闭连接,并移除List中的当前线程
socket.close();
chatThreads.remove(this);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} finally{
try {
din.close();
don.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
运行ChatSever后,再同时打开多次ChatClient,就可以实现多人聊天了,你也试试。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# socket做聊天室
# java实现聊天室
# socket实现聊天室
# 使用Java和WebSocket实现网页聊天室实例代码
# java socket实现聊天室 java实现多人聊天功能
# Java基于socket实现简易聊天室实例
# java实现一个简单TCPSocket聊天室功能分享
# Java Socket聊天室编程(一)之利用socket实现聊天之消息推送
# Java Socket聊天室编程(二)之利用socket实现单聊聊天室
# 用java WebSocket做一个聊天室
# 基于Tomcat7、Java、WebSocket的服务器推送聊天室实例
# Java编程实现基于TCP协议的Socket聊天室示例
# Java基于Socket实现多人聊天室
# 客户端
# 的人
# 你也
# 希望能
# 有兴趣
# 关闭窗口
# 服务端
# 大家多多
# 移除
# 就可以
# 实现了
# 发送给
# 聊天室
# void
# static
# args
# frameClient
# String
# main
# thread
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript模板引擎Template.js使用详解
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
如何在IIS服务器上快速部署高效网站?
如何在服务器上配置二级域名建站?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
Laravel Fortify是什么,和Jetstream有什么关系
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Laravel如何保护应用免受CSRF攻击?(原理和示例)
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Android实现代码画虚线边框背景效果
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
活动邀请函制作网站有哪些,活动邀请函文案?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
Android自定义控件实现温度旋转按钮效果
如何基于PHP生成高效IDC网络公司建站源码?
JavaScript如何实现倒计时_时间函数如何精确控制
详解jQuery中的事件
Laravel如何配置Horizon来管理队列?(安装和使用)
googleplay官方入口在哪里_Google Play官方商店快速入口指南
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
原生JS获取元素集合的子元素宽度实例
如何在IIS中新建站点并配置端口与物理路径?
,南京靠谱的征婚网站?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
JavaScript常见的五种数组去重的方式
如何在建站宝盒中设置产品搜索功能?
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
网站优化排名时,需要考虑哪些问题呢?
原生JS实现图片轮播切换效果
深入理解Android中的xmlns:tools属性
简历在线制作网站免费版,如何创建个人简历?
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
如何在万网开始建站?分步指南解析
Android中AutoCompleteTextView自动提示
如何在阿里云通过域名搭建网站?
,网页ppt怎么弄成自己的ppt?
如何在云主机上快速搭建网站?
重庆市网站制作公司,重庆招聘网站哪个好?
长沙做网站要多少钱,长沙国安网络怎么样?
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
如何为不同团队 ID 动态生成多个独立按钮
如何用AI帮你把自己的生活经历写成一个有趣的故事?
在Oracle关闭情况下如何修改spfile的参数
高性价比服务器租赁——企业级配置与24小时运维服务
如何在云虚拟主机上快速搭建个人网站?
中山网站推广排名,中山信息港登录入口?

