专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »网络编程 » 即时通信软件:即时通信 »正文

即时通信软件:即时通信

来源: 发布时间:星期六, 2008年11月29日 浏览:23次 评论:0
今天上午查了关于即时通信所用的技术的一些文章,但收获太少了.有点郁闷.只有一篇关于组播技术的文章.现摘录于此,以供以后查阅.

基于组播(IP多播)技术的即时通信工具
022刘晓明 200201020219同组人:李贝,王强
组播即IP多播技术始于上世纪80年代,1988年Steve Deering首次在其博士论文当中提出IP多播的概念。1992年3月的IETF在因特网范围首次实现IETF会议声音的多播,当时有20个网点可同时听到会议声音。IP多播由于源点发送,多点接收的特点,即一对多的通信,广泛应用于实时信息交付(如新闻,股市行情等),软件更新,交互式会议,流媒体传播等等。关于组播可以参考[W-MCAST]。
在TCP/IP通信中有三种通信方式,即单播,广播和组播。单播为一对一的信息传送,对服务质量要求高。广播为使用子网内的特殊IP地址,IP地址最后一段为255的地址,进行广播,子网内所有电脑均可收到数据报,通信量巨大,智能低,所以并不被允许跨越网段。而组播使用了IP分组的概念,在路由中建立IP组,并在子网中充分利用硬件多播的方式进行信息传送,组播通过路由的传送是允许跨越网段的。而由于在子网中利用了硬件多播的方法,不参加组播组的电脑不会收到组播数据报,所以即实现了广播又有效控制了流量,增大了广播范围。
笔者曾经在所在的局域网内组建过FreeICQ服务器,一个免费的即时通信工具,但由于FreeICQ有一个服务器端,所以在使用过程中带来诸多不便。
1.服务器地址的识别。我使用ADSL上网方式,常常更改IP地址,而一些动态域名解析软件又需要我时刻在线才能进行地址解析,成本太高。
2.开机时间。必须保证服务器开机,才能使客户端开始工作,对学生来说困难太多,另外个人经历有限。
3.使用的方便性,尽管已经有了很多的即时通信工具,但是都需要上网时才能使用,对一般用户来讲,在同一局域网内并不方便。
而除了这种基于C/S,单播模式的即时通信工具之外,还有一种至今仍然不成气候的广播聊天室。广播使用的是IP地址最后一段为255的IP地址,发送的数据报所有在同一IP段内的电脑都可以收到,但是最大通信范围也就是这253台电脑(除去最后一段为0和255的,网关,DNS等等还不算)。而且由于所有电脑都会收到,所以通信量很大,很容易被恶意的客户端使用DoS进行攻击而停止工作。优点就是最早实现了无服务器。
组播使用IPv4网络中的D类IP地址,范围从224.0.0.0至239.255.255.255,在这个范围当中没有任何主机,而专门用于组播,所以D类IP不允许出现在任何形式的源地址当中。在组播开始时进程首先申请加入一个组播组,之后由主机向路由器发出加入组播组的申请,路由器在向所有可以联系到的路由器发出申请以便用于接收组播数据。这样就完成了加入组播组的工作。而发送组播数据时,先对数据打包进一个UDP数据报然后发送到路由器,路由器再寻找可以联系到的路由当中使用同一个组的路由,并进行转发。不在同一组的路由和主机不会接到本组的数据报。通过这种方式即扩大了通信范围又有效的抑止通信数据量。
组播使用IGMP协议(Internet Group Management Protocol)进行管理,对应[RFC1112]和[RFC2236]。IGMP协议已经成为TCP/IP协议标准的一部分了,要进行组播的主机也必须要有IGMP协议的支持。但是同时,组播也必须要有支持组播的路由器的支持,在已有的部分路由器当中,组播并不是默认启动的服务。
本文实现的软件Multicast Messenger使用Java语言写成,运行环境为JRE1.4.2。软件实现分为三部分,通信核心类MC-Core,核心测试类MCTest,主程序MCM。至本文时最新版本为v1.2。
通信核心类有如下四个类:
lcn.heut.gashero.multicast.IMultiCastRadio。定义了客户端监听组播信息的事件接口。
lcn.heut.gashero.multicast.NotMultiCastAddressException。当输入的IP地址不是一个有效的组播地址时,抛出的异常类。
lcn.heut.gashero.multicast.MultiCastRadio。接收组播数据的类,使用多线程阻塞监听一个组播地址和对应端口。并在收到信息后使用二进制和字符串两种方式提供给客户。
lcn.heut.gashero.multicast.MultiCastSender。发送组播数据的类,在加入组播组之后负责将输入数据转换成二进制数据,加入UDP数据报后发送给组播组。
核心测试类专门用于测试通信核心的工作,以找出bug和提供给第三方开发者以使用示例。含有2个类:
lMCRadio。用于测试接收数据。
lMCSender。用于测试发送数据。
他们都是控制台模式的应用程序,提供了最基本的测试功能。
主程序类包含了主窗体和设置窗体2个类,还调用了我写的系统日志类。
lMCMsg。主窗体类,实现了聊天室的主框架和基本逻辑,对通信核心类的调用也在这里面。
lMCSetting。设置窗体类,可以设置组播地址和端口,另外还将设置保存到文件当中。
lcn.heut.gashero.system.Logger。系统日志类,用于在程序运行的过程中记录运行日志,以提供给用户更多的信息和便于调试。
软件当中我对通信核心类进行了特别的封装以便于在未来可以有更多的开发者可以更方便的使用组播方式进行编程。通信接口我也使用了字符串和二进制两种方式,对一些高级应用,比如对象序列化和数据加密等等,有经历的开发者可以另外改造二进制通信方式。
作为一个实用性很强的软件,我并不仅仅为了比赛而写作它,而是要作为一个有用的软件继续升级开发,从第一个版本的运行成功至今,至写作时已经是v1.2版本了。在后来的版本当中我会分别加入更好的界面,对数据传输进行加密,为方便网络管理员而使用獊
标签:

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: