基于JAVA的ICQ系统的设计于实现

一.序言
ICQ是英文"I seek you "的简称,中文意思是我找你。ICQ最大的功能就是即时信息交流,只要记得对方的号码,上网时可以呼他,无论他在哪里,只要他上网打开ICQ,人们就可以随时交流。ICQ源于以色列特拉维夫的Mirabils公司。该公司成立于1996年7月,也就是在这个时候,互联网上最出名,下载使用人数最多的免费软件ICQ诞生了。可能是其不断增加的用户和广阔的前景以及广泛的应用前景和巨大的市场潜力,Mirabils的ICQ最终被美国在线AOL收购。由于ICQ的成功,推动了ICQ的本土化,就中文的ICQ而言,现在已经越来越多,比如著名的深圳腾迅公司推出的OICQ(现在由于版权问题,已改名为QQ2001),还有由TOM.COM推出的Tomq等,这些软件技术都很好,而且简单易用,成为中国网民最喜欢的通信软件。

但是这些公司都只提供软件的客户端程序免费下载,而不提供其服务器程序,因此对于未与互联网连接的私有网络,这些软件就用不上了。当然网上也有免费的类似ICQ的服务器提供下载,但是好多都不提供源程序,即使有,其说明也很简单,我很想知道它是怎么回事,所以我就试着做了。

二.设计

1.数据库设计
系统可以采用任何一种流行的,Java支持的数据库,本系统采用了Microsoft公司的access作为后台数据库。通过对现在流行的一些Icq的参考,建立数据库,名为javaicq,数据库共建立两个表,一个是用户的基本信息,包括呢称,Jicq号码等。一个是用户的好友表,包括用户自己的号码和好友的号码。

(1)用户的基本信息表(表名icq)

序号 字段名 含义 数据类型 NULL

1 Icqno 用户的号码 Int No

2 Nickname 用户的呢称 Char No

3 Password 用户的密码 Char No

4 Status 用户在线否 Bit No

5 Ip 用户的IP地址 Char Yes

6 Info 用户的资料 Varchar Yes

7 Pic 用户的头像号 Int Yes

8 Sex 用户性别 Char Yes

9 Email 用户的email Char Yes

10 Place 用户的籍贯 Char yes

其中Icqno字段为自动增加。(其他还可以添加诸如电话号码等字段作为更多选择)

(2)用户的好友表(表名friend)

序号 字段名 含义 数据类型 NULL

1 Icqno 用户的号码 Int No

2 Friend 好友的号码 Int No

3.系统模式及程序(具体程序参看源程序)
系统采用客户/服务器摸式(如图)

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 399.75pt; HEIGHT: 349.5pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.gif" o:href="http://www-900.ibm.com/developerWorks/cn/java/l-oicq/fig1.gif"></imagedata></shape>

1. 服务器程序:

服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类java.net.Socket.,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8080,然后无限循环调用accept()方法接受客户程序的连接

服务器程序代码如下:(部分)

2. 客户程序如下(部分)

客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造BufferedReader,PrintWriter来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如注册,登录,查找好友等,服务器收到来自客户的请求后,针对不同的消息处理请求, 虽然UDP不可靠但是对于icq可靠性并不太重要,而且UDP快速,所以客户间发送信息通过UDP。用户登录时通过类DatagramPacket和DatagramSocket创建UDP包括其本地接受端口以及发送端口,默认端口为5000和5001,通过取得的好友的IP地址来向好友发送消息(send(DatagramPacket)和接受消息(receive(DatagramPacket))。当用户通过UDP收到消息后,可以通过DatagramPacket的方法InetAddress getAddress()得到对方的ip地址,通过对好友列表比较以判断是谁并提示用户收到某某的消息,然后用户选择该用户查看消息,如果好友列表没有该人就显示收到陌生人的消息。用户可以按陌生人按钮查看消息。

1. 用户注册。当服务器收到用户的注册请求,便开始接受客户传第的信息,诸如客户的呢称啦,性别,籍贯,头像,个人资料等,接受完毕后,便通过JdbcOdbc与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其Jicq号码,并在数据库中注册用户的IP地址,然后更新其Status为1即用户在线。客户收到服务器返回的信息后,便打开主程序窗口,并同时开始创建UDP以便在用户之间建立联系。

******部分程序如下:

<shape id="_x0000_i1026" style="WIDTH: 385.5pt; HEIGHT: 417pt" type="#_x0000_t75" alt=""><imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.gif" o:href="http://www-900.ibm.com/developerWorks/cn/java/l-oicq/fig2.gif"></imagedata></shape>

2. 用户登录。在客户端,用户输入其jicq号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JdbcOdbc读取数据库,然后与用户输入的信息比较,如果相同就向客户返回成功消息并将其Status字段设为1表示上线了以及注册其IP地址,否则返回错误,如果客户收到成功信息就打开主窗口,否则提示出错。如果成功,便打开主程序窗口,并同时开始创建UDP以便在用户之间建立联系。然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的friend表,得到好友的号码后,再在icq表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,比如头像,呢称。并且建立几个矢量(Vector)用以存储好友的呢称,jicq号码,头像编号,ip地址等信息。

部分程序如下:(程序流程图与注册差不多,略)

3. 用户添加好友。客户登录后,按查找按钮后,开始向服务器发出查找请求,服务器读取数据库表icq并向客户返回其结果,客户收到后在查找窗口中显示,如果用户选择了一个好友,就向服务器发送添加好友请求,服务器收到后就向数据库表friend中添加自己的号码以及好友的号码,并从icq表中读取其基本信息返回给客户端,然后客户收到并在主窗口显示该好友。并且通过UDP通知该客户,对方收到该消息后,可以选择添加该用户为好友或者不。(程序流程图与程序略,参看源程序)

4. 用户删除好友。用户在其好友列表中选择要删除的好友并按删除,然后向服务器发送删除请求,服务器收到该请求后,连接数据库表friend删除用户及该好友的记录,如果成功就向客户返回成功消息,客户收到后在其好友列表中删除该好友。(程序流程图与程序略,参看源程序)

5. 用户发送和接收消息.用户通过在好友列表里的好友的ip地址,通过UDP与其他用户进行信息交流, (程序流程图与程序略,参看源程序src.zip)及部分程序运行结果界面图pic.zip

三.程序界面
程序界面主要参考腾迅公司的QQ2000,在实现时采用的Java的Swing图形包。开发工具用的是Borland公司的Jbuilder4。

四.程序的使用
源程序参见 src.zip.
部分程序运行结果界面图pic.zip.

1. 服务器端:(Windows平台)首先应有java环境jdk,建议采用jdk1.3。然后应有一个数据库系统,建立数据库javaicq,并且建立表icq和表friend。然后在控制面板中的ODBC数据源中设置数据源javaicq建立与数据库的连接。然后运行javac Server.java ,java Server及可。

2. 客户端:只要有有java环境jdk就可以建议jdk1.3。然后运行javac New.java ,java New及可。

五.参考资料:

  • Java2图形设计 卷二:Swing (美) David M.Geary
  • Java2 编程思想 (美) Bruce Eckel

· UNIX网络编程(第一卷)(美) W.Richard Stevens

基于JAVA的ICQ系统的设计于实现相关推荐

  1. 基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署

    基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署 基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  2. 【JAVA毕设】基于Java的在线购物系统的设计与实现

    目录 基于Java的在线购物系统的设计与实现 1.功能模块 2.系统设计思想 主要代码展示 源码及说明文档下载路径 基于Java的在线购物系统的设计与实现 电子商务(Electronic Commer ...

  3. 基于java的婚庆策划系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java的婚庆策划系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java的婚庆策划系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部 ...

  4. Lu022基于Java人才招聘系统的设计与实现【附文献三万字】

    一.摘要 当今社会,随着科技进步和智能化的到来,IT行业已经成为了一大热门领域.越来越多的人选择了投身此事业.但与此同时,我们发现市面上虽然已经有了很不错的招聘平台和系统.但IT行业是一个比较特殊的领 ...

  5. 基于JAVA售楼系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA售楼系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA售楼系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  6. 基于JAVA智慧校园系统后端计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA智慧校园系统后端计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA智慧校园系统后端计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  7. 基于java的线上购物系统的设计与实现_基于javaweb的在线购物系统的设计与实现...

    基于javaweb的在线购物系统的设计与实现 所属分类:WEB开发 开发工具:Java 文件大小:8708KB 下载次数:1 上传日期:2021-01-21 23:35:49 上 传 者:for Ma ...

  8. 基于Java毕业设计爱心公益网站设计与制作源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计爱心公益网站设计与制作源码+系统+mysql+lw文档+部署软件 基于Java毕业设计爱心公益网站设计与制作源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B ...

  9. 基于JAVA汽车租赁平台的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA汽车租赁平台的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA汽车租赁平台的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技 ...

  10. java ee论坛系统代码_Forum 基于JavaEE的论坛系统的设计与实现 源代码 Develop 238万源代码下载- www.pudn.com...

    文件名称: Forum下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 1711 KB 上传时间: 2013-10-05 下载次数: 1 详细说明:基于JavaEE ...

最新文章

  1. 关于div的滚动条滚动到底部,内容显示不全的问题。(已解决)
  2. intellij idea2016 web项目创建
  3. linux on android分区,linux分区笔记
  4. Py之PyWapFetion:PyWapFetion的简介、安装、使用方法之详细攻略
  5. 对象的浅拷贝和深拷贝
  6. linux sha1sum命令,讲解Linux中校验文件的MD5码与SHA1码的命令使用
  7. 一个程序员送给大学生的一些话
  8. 详解HelloWorldBasic实例
  9. 深入理解Java虚拟机(第三版)-13.Java内存模型与线程
  10. PHP socket初探 --- 一些零碎细节的拾漏补缺
  11. HandyJSON:Swift语言JSON转Model工具库
  12. String、StringBuiler、StringBuffer的区别
  13. 最全Shiro教程,一篇学会Shiro权限管理
  14. jQuery锁定页面元素(表格列)
  15. Windows文件系统-NTFS文件系统
  16. 字节、腾讯、金山wps、跟谁学、百度 go工程师面试题集锦
  17. ContestHunter #26 B 玩骰子
  18. H5页面拉起第三方App
  19. arduino密码锁代码
  20. 计算机毕业设计 基于SSM的公交线路查询和管理系统

热门文章

  1. Windows Azure 虚机密码忘记处理
  2. 一款炫丽的网页播放器插件
  3. 新世纪大学英语(第二版)综合教程第一册 Unit 3 (中英翻译和重点单词)
  4. SqlServer高级函数使用
  5. 最有特点的、最有深度的网名分享:2012╰菿來啲那天
  6. 全面解析Linux 内核 3.10.x - Device Tree 详解
  7. 二叉树应用_二叉搜索树与双向链表
  8. 分享一下支付宝的支付(soEasy)
  9. 嘟嘟噜~~~第一次写博,纪念一下
  10. 深入理解哈希表(JAVA和Redis哈希表实现)