# Java 课设
## 网络聊天程序
## 第一章
开发环境:Intelij IDEA 和 JDK8
## 第二章业务分析
用 JavaSocket 编程开发聊天室
1. 用 Java 图形用户界面编写聊天室服务器端和客户端, 支持多个客户端连接到一个服务器。每个客户端能够输入账号。
2. 可以实现群聊(聊天记录显示在所有客户端界面)。
3. 完成好友列表在各个客户端上显示。
4. 可以实现私人聊天,用户可以选择某个其他用户,单独发送信息。
5. 服务器能够群发系统消息,能够强行让某些用户下线。
6. 客户端的上线下线要求能够在其他客户端上面实时刷新。
说明:
1.客户端和服务端都用 swing 做成图形界面
2.客户端与服务端都可以用Socket进行通信
3.客户端和服务端都实现Runnable接口,开启线程。
4.通过流将数据封装,通过用户名对不同用户进行区别
## 第三章 系统设计
1. 系统功能定义
服务端的代码在 Server.java 文件中
public void run() 用来对用户的登录进行监听,如果用户上线,服务器端就会有用户登录信息。
public void actionPerformed(ActionEvent e) 有两个 JButton 会用到这个方法,一个功能是对客户端发送消息,另一个是踢人
public void handleAll() 功能是群发
public void handleExpel() 功能是踢人
public void sendMessage(String msg)功能是对所用用户进行发送 msg,Server.java 中还有一个类 ChatThread 功能是开启一个线程,对每个事件进行判断,看是否是踢人,群发,还是私聊,这里会用到一个 switch case 语句
客户端的代码在Client.ava中
public void run() 开启线程,处理消息
public void actionPerformed(ActionEvent e) 处理鼠标点击事件
public void handleSS() 在私聊窗口中发消息
public void handleSend() 群发消息
public void handleSec(String name) 建立私聊窗口
2. 关键问题设计
最关键的是 Client.java 中的 public void run()的设计
```java
public void run() {//客户端与服务器端发消息的线程
while (true) {
try {
String msg = br.readLine();//读取服务器是否发送了消息给该客户端
String[] strs = msg.split("#");
//判断是否为服务器发来的登陆信息
if (strs[0].equals("LOGIN")) {
if (!strs[1].equals(nickName)) {//不是本人的上线消息就显示,本人的不显示
jta.append(strs[1] + "上线啦!\n");
dl.addElement(strs[1]);//DefaultListModel来更改JList的内容
userList.repaint();
}
} else if (strs[0].equals("MSG")) {//接到服务器发送消息的信息
if (!strs[1].equals(nickName)) {//别人说的
jta.append(strs[1] + "说:" + strs[2] + "\n");
} else {
jta.append("我说:" + strs[2] + "\n");
}
} else if (strs[0].equals("USERS")) {//USER消息,为新建立的客户端更新好友列表
dl.addElement(strs[1]);
userList.repaint();
} else if (strs[0].equals("ALL")) {
jta.append("系统消息:" + strs[1] + "\n");
} else if (strs[0].equals("OFFLINE")) {
if (strs[1].equals(nickName)) {//如果是自己下线的消息,说明被服务器端踢出聊天室,强制下线
JOptionPane.showMessageDialog(this, "您已被系统请出聊天室!");
System.exit(0);
}
jta.append(strs[1] + "下线啦!\n");
dl.removeElement(strs[1]);
userList.repaint();
} else if ((strs[2].equals(nickName) || strs[1].equals(nickName)) && strs[0].equals("SMSG")) {
if (!strs[1].equals(nickName)) {
jTextArea.append(strs[1] + "说:" + strs[3] + "\n");
jta.append("系统提示:" + strs[1] + "私信了你" + "\n");
} else {
jTextArea.append("我说:" + strs[3] + "\n");
}
} else if ((strs[2].equals(nickName) || strs[1].equals(nickName)) && strs[0].equals("FSMSG")) {
sender = strs[1];
receiver = strs[2];
//接收方第一次收到私聊消息,自动弹出私聊窗口
if (!strs[1].equals(nickName)) {
FirstSecret = false;
jTextArea.append(strs[1] + "说:" + strs[3] + "\n");
jta.append("系统提示:" + strs[1] + "私信了你" + "\n");
handleSec(strs[1]);
} else {
jTextArea.append("我说:" + strs[3] + "\n");
}
}
} catch (Exception ex) {//如果服务器端出现问题,则客户端强制下线
JOptionPane.showMessageDialog(this, "您已被系统请出聊天室!");
System.exit(0);
}
}
}
```
## 第四章 源代码清单
Server.java
```java
package server;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
class Server extends JFrame implements Runnable, ListSelectionListener, ActionListener {
private ServerSocket ss = null;
private ArrayList<ChatThread> users = new ArrayList<ChatThread>(); //容量能够动态增长的数组
DefaultListModel<String> dl = new DefaultListModel<String>();
public JList<String> userList = new JList<String>(dl);//显示对象列表并且允许用户选择一个或多个项的组件。单独的模型 ListModel 维护列表的内容。
//群发消息输入栏
private JTextField jtf = new JTextField();
public Server() throws Exception {
this.setTitle("server");
this.add(userList, "North");//放在北面
JPanel jpl = new JPanel();
this.add(jpl, "South");
//仅将群发消息输入栏设为一栏
jtf.setColumns(2);
jpl.setLayout(new BorderLayout());
jpl.add(jtf, BorderLayout.NORTH);
JButton jbt = new JButton("踢人");
jpl.add(jbt, BorderLayout.WEST);//踢出聊天室
JButton jbt1 = new JButton("群发");
jpl.add(jbt1, BorderLayout.EAST);//群发消息
//实现群发
jbt1.addActionListener(this);
//实现踢人
jbt.addActionListener(this);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocation(400, 100);
this.setSize(300, 400);
this.setVisible(true);
this.setAlwaysOnTop(true);
ss = new ServerSocket(8888);
new Thread(this).start();//监听用户端的加入
}
@Override
public void run() {
while (true) {
try {
Socket s = ss.accept();
ChatThread ct = new ChatThread(s); //为该客户开一个线程
users.add(ct); //将每个线程加入到users
//发送JList里的用户登陆信息,为了防止后面登陆的用户无法更新有前面用户的好友列表
ListModel<String> model = userList.getModel();//获取JList的数据内容
for (int i = 0; i < model.getSize(); i++) {
ct.ps.println("USERS#" + model.getElementAt(i));
}
ct.start();
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(this, "服务器异常!");
System.exit(0);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于 JavaSocket 编程开发聊天室【100013037】
共29个文件
class:14个
java:6个
txt:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 76 浏览量
2023-07-24
15:06:46
上传
评论 2
收藏 470KB ZIP 举报
温馨提示
用 JavaSocket 编程开发聊天室 用 Java 图形用户界面编写聊天室服务器端和客户端, 支持多个客户端连接到一个服务器。每个客户端能够输入账号。 可以实现群聊(聊天记录显示在所有客户端界面)。 完成好友列表在各个客户端上显示。 可以实现私人聊天,用户可以选择某个其他用户,单独发送信息。 服务器能够群发系统消息,能够强行让某些用户下线。 客户端的上线下线要求能够在其他客户端上面实时刷新。 说明: 1.客户端和服务端都用 swing 做成图形界面 2.客户端与服务端都可以用Socket进行通信 3.客户端和服务端都实现Runnable接口,开启线程。 4.通过流将数据封装,通过用户名对不同用户进行区别
资源推荐
资源详情
资源评论
收起资源包目录
100013037-基于 JavaSocket 编程开发聊天室.zip (29个子文件)
coursework
chat1
src
client
Client.java 13KB
Main.java 182B
server
ChatThread.java 2KB
Server.java 6KB
out
production
chat1
client
Client$4.class 886B
Client$3.class 976B
Client$1.class 1KB
Client$2.class 700B
Client$5.class 782B
Client.class 9KB
Main.class 463B
server
Server.class 5KB
ChatThread.class 3KB
Server$ChatThread.class 2KB
META-INF
chat1.kotlin_module 16B
chat1.iml 423B
敏感词库.txt 9B
spider
data.txt 264B
src
Spider.java 15KB
Main.java 144B
out
production
spider
Spider$SpiderOne.class 1KB
Spider$SpiderAll.class 3KB
Main.class 432B
Spider.class 10KB
spider.iml 423B
网址库.txt 68B
LICENSE 1KB
实验报告.docx 451KB
README.md 44KB
共 29 条
- 1
资源评论
- weixin_639059782023-11-16感谢资源主的分享,很值得参考学习,资源价值较高,支持!
- m0_750287012024-06-01内容与描述一致,超赞的资源,值得借鉴的内容很多,支持!
- m0_739379162024-07-07资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
神仙别闹
- 粉丝: 3783
- 资源: 7469
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- OBD-II Java API.zip
- 一个支持多人游玩的Flappy-Bird变种游戏, Java编写.zip
- 一个用 Java 实现的贪吃蛇小游戏.zip
- 一个利用Java Swing实现可视化界面的扫雷小游戏.zip
- 一个简单ssh(spring springMVC hibernate)游戏网站,在网上找的html模板,没有自己写UI,重点放在java后端上.zip
- 一个使用Java完成的仿超级玛丽小游戏.zip
- 一个利用java语言制作的简单飞机游戏.zip
- 一个利用Java编写的,基于swing组件的连连看小游戏.zip
- 一个简易的对对碰游戏软件,运用Java、Java FX技术.zip
- 一个基于JAVA的类魔塔小游戏 a Java based MagicTowerlike game.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功