Java 聊天室的简单实现原理

先贴一个简单的思路,后续有时间再把代码写好贴上来。

简单的JAVA聊天室:一般是使用Socket基于 C/S 架构,其设计的过程如下:
1)服务器通过某个端口监听是否有客户端发送Socket链接请求。
2)客户端向服务器端发送一个Socket链接请求。
3)服务器端调用accept()方法接收客户端Scoket 并建立链接。
4)通过Socket对象的getInputStream / getOutputStream 方法进行IO流的操作,服务器端和客户端进行信息交流。
5)关闭服务器和Socket。

服务器端的实现:
创建一个一个 ServerSocket 并指定端口号: ServerSocket ServerSocket = new ServerSocket(port,max) ,max 为最大连接数。
用一个LinkList 来存储用户信息,接收客户端的信息后,遍历LinkList ,将信息发送给所有的用户。如果是发送给私人的信息,则遍历LinkList 找到对应的用户,发送信息给该用户。用户信息用Node类表示,里面包括:userName ,socket ,outputStream 和 InputStream 。
当服务器侦听到有新用户连接时,将用户信息添加到 LinkList 中。

使用ObjectInputStream 和 ObjectOutputStream 进信息的传输。
用户发送信息时选择是 私聊 还是将信息发送给所有人,将标志字段写入ObjectOutputStream 中,接着讲其他标志信息如自己用户名以及发送的具体信息也写入到ObjectOutputStream 中,通过socket 发送到 服务器。
服务器接收用户发送来的信息,并调用ObjectInputStream 的 readObject()对象对信息进行一个简单的解析,获取标志信息和具体的信息,判断是私聊信息还是群聊信息,进行下一步的发送操作。
但是这样太丑陋!ObjectInputStream 和 ObjectOutputStream 因为要进行对象解析,再传输的时候也比较慢。

注意: 在向ObjectOutputStream 写入信息时先写入一个特殊的字符串作为判别字段,服务器以此来判断是否是一条新信息。
改进:如果是现在,那么优先采用 Json 来传输数据,Json技术已经日渐成熟,而且解析快速方便,适合做为少量数据传输的额载体。具体的做法: 客户端将信息构造成Json的格式,在服务器端接收数据流然后解析成Json对象,再根据Json对象的性质获取对应信息。

你可能感兴趣的:(java)