简单在线聊天系统的实现(初步)
来源:互联网 发布:php require 编辑:程序博客网 时间:2024/04/28 12:49
前段时间开始学习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方法即可。
通过这七步,我初步构建了一个简单在线聊天系统,后续过程会接着补上。通过这个小项目的锻炼,我最直观的感受就是,程序不是一蹴而就的,也是一步步的搭建和调试,先从最简单的开始,当然在这之中,还遇到了其他的错误就不一一说明,但这是对自己所学知识很好的融会贯通,也积累了不少的经验。
- 简单在线聊天系统的实现(初步)
- 简单在线聊天系统的实现(完成)
- Web 实现在线聊天的系统 强烈推荐
- 基于Web在线聊天系统初步构想。
- 实现简单的 webQQ聊天系统
- ios socket 实现简单的聊天系统
- 基于PHP实现一个简单的在线聊天功能
- 基于webSocket实现的一对一在线聊天系统
- java Socket实现简单在线聊天(一)
- java Socket实现简单在线聊天(二)
- java Socket实现简单在线聊天(三)
- java Socket实现简单在线聊天(一)
- java Socket实现简单在线聊天(二)
- java Socket实现简单在线聊天(三)
- thinkphp5实现在线聊天系统(一),有源码下载!
- 简单的聊天系统
- 简单的QQ临时在线聊天功能
- 基于JavaSE的在线聊天系统
- Light OJ 1274 Beating the Dataset (推公式)
- java.lang.IllegalStateException: This Activity already has an action bar supplied by the window deco
- Android写字绘图播放功能实现
- com.android.sdklib.repository.FullRevision
- 电压比较器之LM393工作原理
- 简单在线聊天系统的实现(初步)
- 消息队列设计与实现
- 内部类笔记
- PySpider爬虫框架折腾体验
- HDU 2073
- 第一类第二类斯特林数总结
- @protocol和category中如何使用@property?
- 【学习 OpenCV】—— 图像减色(color reduced)
- NSIS Error:Error writing temporary file. Make sure your temp folder is valid的解决