Java 入门 之 聊天室项目思路 服务器端

来源:互联网 发布:cydia找不到软件源 编辑:程序博客网 时间:2024/06/04 17:53

项目思路:
1)侦听器,实现启动服务器的功能;

2)服务器,侦听到客户请求并给予连接;

3)客户端,连接得到服务器套接字,输入聊天内容;

4)聊天室管理器,将聊天内容共享到各个已连接客户端;

一.侦听器(防止阻塞,类中实现 ServerSocket 的构建)
1. 调用服务器的构造函数,匿名构造对象,运行对象 start 方法。

二.服务器(继承自 Thread 类)
1.创建一个 ServerSocket 对象,获取服务器套接字,实现侦听;

2.侦听得到连接请求,创建连接,将服务器的套接字传给新构建的客户端对象;

3.为聊天室管理器添加一个客户端对象;

4.执行客户端对象线程。

(3 ~ 5 是循环执行的)

三.客户端(继承自 Thread 类
1.接收来自服务器端的套接字;

2.创建输入流对象,写入聊天内容;

3.将聊天内容通过聊天室管理器转发给每一个连接到服务器的客户端。

四.聊天室管理器
1.单例模式实现聊天室管理器

因为,一个聊天室只能有一个管理器,所以,采用单例模式实现;

单例模式的结构为:私有的构造函数+新建私有的抽象的final的对象+公有的抽象的Get函数
2.客户端添加函数;

3.客户端删除函数;

4.客户端广播函数;



http://blog.csdn.net/java_cxrs/article/details/3769556

问题1:
多次向服务端发送数据时报错
原因:客户端向服务端发送一次数据就关闭了,多次发送无效
解决办法:何时关闭输出流?当窗口退出时关闭。服务端多次接收数据,当服务端建立并且能接收客户端时就一直接收。
问题2:客户端退出时报错

原因:当客户端退出使,服务端还一直等待接收数据,没能关闭
解决办法:

捕获EOFException异常
使用finally关键字关闭dis,s。
捕获建立服务端时端口被使用的异常。

3.多客户端向服务端发送数据
采用线程机制接收多个客户端数据,实现一线程,利用构造方法接收客户端,当线程启动时就不断接收数据。

4.服务端向客户端发送数据
保存线程类
添加线程类
在线程类中写一发送方法。
何时发送?

当服务端接收到数据时,线程类对象拿到客户端,然后向客户端发送。

5.客户端接收数据
写一客户端接收线程
当输入流变量拿到输入数据时接收数据,并显示在显示框中
何时启动此线程?
当客户端与服务端连接后

6.一个客户端退出时报错
原因:当一个客户端退出时,另一个客户端等待输入。
解决办法:捕获客户端接收数据时SocketException异常。

7.一个客户端退出,另一客户端输入报错
原因:当一个客户端退出时,另一个客户端发送数据时无人接收。
解决办法:当客户端发送给服务端时服务端向外发送时捕获SocketException异常


1 0
原创粉丝点击