練手小項目一:JAVA聊天室系統說明书
寒假之余想加强对JAVA的掌握,准备找些小的项目练练手,提高下自己的能力,今天终于完成了第一个小项目,特此发布
此程序参考资料:尚学堂项目及CSDN下载频道网友程序,感谢大家。
时间:2009年1月13日
开发工具:eclipse
项目描述:简单的多人点对点聊天系统,具有输入输出功能,收发信息简单,窗口界面简洁,采用IO,线程等技术
项目思路:
一.建立聊天室窗口界面(客户端)
1.设置窗口大小。
2.添加输入框,显示框。
3.响应关闭窗口事件。
4.响应输入框输入事件。
二.建立服务端
1.建立服务端对象并设置端口
2.接收客户端对象
三.建立客户端对象
1.建立客户端对象并设置IP和端口。
2.与服务端进行连接
写一连接方法,当窗口显示后进行调用。
四.客户端向服务端发送数据
1.利用输出流向服务端发数据。
2.服务端采用输入流接收数据。
问题1:
多次向服务端发送数据时报错
原因:客户端向服务端发送一次数据就关闭了,多次发送无效
解决办法:何时关闭输出流?当窗口退出时关闭。服务端多次接收数据,当服务端建立并且能接收客户端时就一直接收。
问题2:客户端退出时报错
原因:当客户端退出使,服务端还一直等待接收数据,没能关闭
解决办法:捕获EOFException异常
使用finally关键字关闭dis,s。
捕获建立服务端时端口被使用的异常。
五.多客户端向服务端发送数据
采用线程机制接收多个客户端数据,实现一线程,利用构造方法接收客户端,当线程启动时就不断接收数据。
六.服务端向客户端发送数据
1.保存线程类
2.添加线程类
3.在线程类中写一发送方法。
何时发送?当服务端接收到数据时,线程类对象拿到客户端,然后向客户端发送。
七.客户端接收数据
1.写一客户端接收线程
2.当输入流变量拿到输入数据时接收数据,并显示在显示框中
何时启动此线程?
当客户端与服务端连接后
八.一个客户端退出时报错
原因:当一个客户端退出时,另一个客户端等待输入。
解决办法:捕获客户端接收数据时SocketException异常。
原因:当一个客户端退出时,另一个客户端发送数据时无人接收。
解决办法:当客户端发送给服务端时服务端向外发送时捕获SocketException异常