Java----模拟QQ

目录

多个用户能够在局域网内互相通信,并对自己的好友进行管理,除了注册登录之外,还能与好友进行聊天,可以添加与删除好友。模仿 QQ 的部分功能,建立一个功能全面的网络聊天程序,可以实现多人聊天,并可以保存聊天记录。


 

功能要求:

1)多线程聊天程序

2)可以接收多人聊天

3)可以发送文件

4)可以发送图片

5)可以保存聊天记录

6)要求界面美观、布局合理、功能操作简便

 

运行环境:

操作系统--Microsoft Windows 7

支持环境--java(Eclipse)环境

数 据 库--MySQL

 

功能划分:

     1.注册登录                                                 

     2.个人信息管理

     3.组管理                                             

     4.好友管理

     5.即时聊天                                    

 

程序框图:

 

源程序清单:

 

 

代码太多,具体的需要代码资料的可以私聊我哟!!!

 

程序运行测试

登录界面

 

 

账号可保存记录,选择状态

 

用户注册界面

 

注册成功

 

主题界面如下

 

查找好友

 

验证信息

 

聊天主界面

 

总结:

1.存储上线用户。

在服务器上有一个HashTable或者其他的集合也可以,用来存储所有上线的用户,一般应存贮用户的id以标识每个用户,还应该存储用户连上的Socket以便向对应的客户发送消息。用户在登录的时候,我们一般会将用户的id查出来后保存在一个变量里,连上服务器后,我们马上会向服务器发送一个消息,在这个消息的字符串中我们会包含本用户的ID号在里面,当服务器接受到这个消息后会根据消息的类型将该用户的状态改变为“在线”状态。发送的消息应该包含两个要素,一个是“消息类型”,一个是“用户ID”,特殊的情况下还应该有对方的“用户ID”。请求某个用户加为好友,我们就向服务器发送消息“请求加为好友=用户ID=对方ID”。请求和某个好友聊天,我们就向服务器发送消息“请求聊天=用户ID=对方ID=端口号”。这样服务器接受到客户传过来的消息后就可以对这个字符串进行解析,然后根据不用的业务类型做出不同的操作。

2.当用户改变状态时通知他的在线好友。

如上所示,当服务器接受到用户发过来的消息后会判断是什么样的业务类型,如果是“上线=用户ID”这样的消息,服务器就会解析出用户的ID号,然后修改数据库中该用户的状态。而每一个客户端的主面板都是自动刷新的,用户状态的改变会立刻反映到用户的好友栏中。

3.向查找到的用户发送请求好友的消息。

如上所示,当服务器接受到用户发过来的消息后进行判断,如果消息是“请求加为好友=用户ID=对方ID”,就会对字符串进行解析,取出用户ID和对方ID,首先我们会在存储所有用户的HashTable中去查找,看看该用户是否在线,如果在,我们就会用HashTable的get方法取到这个用户的Socket,然后想这个用户发送一个来自服务器的消息“请求好友=用户ID”,这个时候这个客户就会收到一个消息,它再对这个消息进行解析,就能知道是谁想加自己为好友了,如果这个客户选择同意,就可以加对方为好友了。如果对方不在线呢,就有数据库向这个用户的数据库中存储一则消息,这样用户一上线就可以看到这个消息了。但前提是用户登录后要首先查看是否有属于自己的消息。

4.双向聊天。

双向聊天的时候,主动的一方在双击自己的好友头像的时候,首先是随机生成一个端口,这个端口应为双方通信的唯一标识。然后在主动的这一方用刚刚生成的端口号建立一个ServerSocket。等待对方的联系,那么对方怎么知道有人找他聊天呢?主动的这一方在建立好ServerSocket后会马上向服务器发送一个消息,格式应该是“请求聊天=用户ID=对方ID=端口号”,服务器接收到这个消息后会对他进行解析,得到对方的ID号以后首先在HashTable中查找,看看对方是否在线,如果对方在线,则向这个用户发送一个消息,格式应该是“请求聊天=用户ID=端口号”,然后这个用户的面板上就有提示,当他同意聊天的时候,就用传过来的端口号建立一个Socket和主动方建立上联系,这样就可以聊天了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值