Java聊天室的简单实现原理
先贴⼀个简单的思路,后续有时间再把代码写好贴上来。
简单的JAVA聊天室:⼀般是使⽤Socket基于 C/S 架构,其设计的过程如下:
1)服务器通过某个端⼝监听是否有客户端发送Socket链接请求。
2)客户端向服务器端发送⼀个Socket链接请求。
3)服务器端调⽤accept()⽅法接收客户端Scoket 并建⽴链接。
4)通过Socket对象的getInputStream / getOutputStream ⽅法进⾏IO流的操作,服务器端和客户端进⾏信息交流。
5)关闭服务器和Socket。
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对象的性质获取对应信息。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论