简单在线聊天系统的实现(初步)

前段时间开始学习JAVA,学到现在刚好把最基础J2SE的部分学完,最大的感触就是面向对象的编程语言虽然各自实现不一样,但是思想却还是一致的,所以暂目前学起来感觉难度还好,毕竟是最基础的嘛!为了把学的基础知识融会贯通,我开始尝试编写一个简单的在线聊天系统,跟着老师一步一步开始了这个小项目。

暂目前我完成了大体的构造,实现了多个客服端向服务器的发送,步骤如下:

step1:首先要做聊天系统,必须搭建框架,因此先写客服端的程序。我用最基本的GUI知识构建了一个Frame,里面包含了两个元件TextField(简称 tf )和TextArea(简称 ta )。

step2:框架构建好后,通过测试,保证从 tf 输入的内容能够显示到 ta 上,因此在 tf 上加了一个ActionListener。

step3:这一步只是加了一个小功能,就是关闭窗口,所以自身加了一个WindowListener,因为在程序中添加的是匿名类,所以传入的参数实现的是WindowAdapter;

step4:此时客户端基本框架已经搭好,所以开始尝试将客户端和服务器端连接。因此开始写服务器端的程序,应用的是TCP连接,此时在服务器端提供了一个接口,并在客户端进行连接,若是成功连接,输出一条测试语句表明连接成功。

step5:服务器端和客服端已经建立好连接,因此尝试从客服端的 tf 输出的语句能让服务器端接收。因为是 tf 发生动作服务器端作出响应,所以在客户端程序里边是在实现了ActionListener的类里面建立Socket连接,并且在OutputStream外包装了DataOutputStream,此时可以通过writeUTF和flush函数就可以向服务器端发送数据了,同时只要在服务器端的程序中做出对应的处理,便可以接收到。

step6:此时会出现一个小问题,因为在服务器端的ReadUTF函数是阻塞式的,所以当客户端关闭时,服务器端便会报出EOFException的错误,所以在服务器端分成两个try、catch部分,分别为ServerSocket(简称ss)和Socket(简称s)的构建和处理,并将ss 和 s 定义为成员变量,此时在s 部分捕捉EOFException,并作出提示处理。

step7:这是基本功能已经实现,但是服务器端只是接受一个客户端的响应,因为readUTF函数是阻塞式的,主方法卡在此处,无法返回上面的代码处接受另一个客户端,因此想要修正这种情况,必须启动线程,将服务器端的程序的格局进行大改。因此在服务器端写一个内部类实现Runnable接口,内部有自己的成员变量Socket和DataInputStream,在构造方法中,接受一个Socket,并且构造一个DataOutStream。在重写的Run方法中,实现之前的输出。由于main方法是静态的,所以无法在里面启动一个动态的内部类线程,所以添加一个start方法,内部为ServerSocket和Socket的建立,并启动线程,此时main方法,只需启动start方法即可。

通过这七步,我初步构建了一个简单在线聊天系统,后续过程会接着补上。通过这个小项目的锻炼,我最直观的感受就是,程序不是一蹴而就的,也是一步步的搭建和调试,先从最简单的开始,当然在这之中,还遇到了其他的错误就不一一说明,但这是对自己所学知识很好的融会贯通,也积累了不少的经验。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值