最近研究了下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
相关文章:
Python文件管理规范_工程实践说明【指导】
,巨量百应是干嘛的?
,交易猫的商品怎么发布到网站上去?
宝塔面板如何快速创建新站点?
如何挑选优质建站一级代理提升网站排名?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
建站之星后台密码遗忘?如何快速找回?
如何选择PHP开源工具快速搭建网站?
制作销售网站教学视频,销售网站有哪些?
教学网站制作软件,学习*后期制作的网站有哪些?
,在苏州找工作,上哪个网站比较好?
如何自定义建站之星网站的导航菜单样式?
如何快速使用云服务器搭建个人网站?
兔展官网 在线制作,怎样制作微信请帖?
大连 网站制作,大连天途有线官网?
如何通过商城自助建站源码实现零基础高效建站?
如何通过cPanel快速搭建网站?
如何彻底删除建站之星生成的Banner?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
建站主机如何选?性能与价格怎样平衡?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
网页设计与网站制作内容,怎样注册网站?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何通过万网虚拟主机快速搭建网站?
建站之星如何快速更换网站模板?
如何快速搭建高效WAP手机网站吸引移动用户?
*服务器网站为何频现安全漏洞?
建站之星后台密码如何安全设置与找回?
制作旅游网站html,怎样注册旅游网站?
江苏网站制作公司有哪些,江苏书法考级官方网站?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
建站之星代理如何优化在线客服效率?
代购小票制作网站有哪些,购物小票的简要说明?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
javascript中的try catch异常捕获机制用法分析
如何在建站宝盒中设置产品搜索功能?
安云自助建站系统如何快速提升SEO排名?
ppt制作免费网站有哪些,ppt模板免费下载网站?
宝塔建站后网页无法访问如何解决?
如何用VPS主机快速搭建个人网站?
html制作网站的步骤有哪些,iapp如何添加网页?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
网站设计制作企业有哪些,抖音官网主页怎么设置?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
网站微信制作软件,如何制作微信链接?
宁波自助建站系统如何快速打造专业企业网站?
如何通过VPS建站无需域名直接访问?
简历在线制作网站免费版,如何创建个人简历?
*请认真填写需求信息,我们会在24小时内与您取得联系。