用Java做一个基于Swing的多人网络聊天室

项目简介:使用Java语言开发的多人聊天室程序


开发环境:MacOS+NetBeans8.1+JDK1.8


项目具体功能:

    服务器端:

  1. 服务器端界面窗口
    1. 启动服务器按钮--------启动服务器功能
    2. 停止服务器按钮--------停止服务器功能----服务器停止,所有聊天退出
    3. 退出服务器按钮--------退出服务器功能----服务器关闭,所有聊天退出
    4. 即时聊天消息显示文本域--------即时聊天信息显示功能
    5. 即时在线用户显示文本域--------即时在线用户显示功能

    客户端:

  1. 登录功能
    1. 聊天室登录界面窗口
      1. 用户名输入框--------用户名称输入功能
      2. 服务器地址输入框--------服务器地址输入功能
      3. 端口号输入框--------端口号输入功能
      4. 进入聊天室按钮--------登录进入聊天室功能
      5. 退出聊天室按钮--------退出聊天室功能
  2. 聊天室功能
    1. 群聊主界面
      1. 即时聊天消息显示文本域--------即时群聊天消息显示
      2. 即时在线用户显示文本域--------即时在线用户情况显示
      3. 退出聊天室功能按钮--------退出聊天室功能
      4. 清除聊天记录功能按钮--------清除聊天记录功能
      5. 文本信息输入文本框--------文本信息输入功能
      6. 发送功能按钮--------文本信息发送功能
      7. 单人聊天功能按钮--------单人聊天模式转换功能
      8. 群聊天功能
    2. 单人聊天
      1. 聊天信息文本域--------显示即时聊天信息以及对方姓名、发送时间
      2. 文本输入框--------文本信息输入功能
      3. 发送按钮--------文本信息发送功能

首先,我喜欢先做界面

毕竟是面向对象编程哈哈哈

我得先有个对象啊,干写代码没啥意思

拿起了祖传的NetBeans

说起这个软件,那真的是对小白来说很友好的一款集成开发软件了

首先,支持中文,其次它有些卡,能让小白有充分的时间观察自己的代码(哈哈哈皮一下)

最重要的是它支持GUI窗体的创作--------新建一个Jframe项目就好

具体的操作就是拖动你要的组件,调节好大小,然后重命名,然后添加监听事件,剩下的就是码代码了


先来服务器端的界面

对,就是这样,三个按钮,两个文本域

下来是客户端

首先是登录界面

下来是聊天室主界面

单人聊天界面:

退出确认界面:


项目GUI界面代码传送门

上面是这个项目图形界面代码的传送门,在这里,其实有了集成工具的帮助,处理起来也不困难,只是麻烦一点。

只需要自己仔细一些,多思考,不要遗漏了一些细节。


下面来说下项目的核心实现

说白了,就是通过网络实现计算机之间的交互嘛

使用Java的Socket实现客户端和服务器端之间的连接

实现客户端重复发送数据到服务器端的功能。

即用户可以在控制台不断输入内容,并将内容逐一发送给服务端。并在服务端显示。

单人聊天比较简单,但是我要做的是一个多人的聊天室

那么多线程必不可少

我通过继承Thread类分别做了ClientThread和ServerThread两个类,把关于接收到Socket滞后的步骤交给线程类去处理

又既然是多人聊天,服务器在这里应该有广播的作用,所以我写了一个BroadCast类

获取到所有客户端的socket,然后在将读到的信息循环发送给每个用户

然后使用一个静态的向量用来存储所有服务器针对客户端而创立的线程

然后发送信息的时候直接使用这个向量取出socket即可

然后是客户端,只要思考清楚一个问题

什么时候获取输入流然后读数据呢?

其实一旦拿到socket对象,什么时候获取都可以

即想什么时候执行readline()方法都可以

具体实现代码传送门

具体的一些细节,可以看看代码中的注释。写了比较久,但还是有很多不完善的地方。希望多多指正。

下一篇将是对该项目的测试

发布了120 篇原创文章 · 获赞 37 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Zhengxinyu666/article/details/99692862