开发基于UDP广播的小型局域网聊天室

什么是UDP广播?
在了解其之前我们先了解一下什么是UDP协议,TCP协议也许大家已经知道,TCP协议主要是用于建立可靠的数据传输连接,而UDP(UserDatagramProtocol,用户数据包协议)与TCP协议之间的不同在于UDP不是一种基于稳定连接的通讯协议。UDP协议将独立的数据包从一台计算机传输到另外一台计算机,但是并不保证接受方能够接收到该数据包,也不保证接收方所接收到的数据和发送方所发送的数据在内容和顺序上是完全一致的。因此,UDP协议更类似于普通邮政服务,寄信人不能够保证所寄出去的信能够被收信人及时收到,后发出的信也许会比先发出的信更早到达。

而UDP广播就是建立于UDP协议上的数据传输,当网络中的某一台机向交换机或路由发送一个广播数据时,交换机或路由则会帮我们将此广播数据发送到其节点下的所有接收者.交换机或路由在此时就有点类似于"大喇叭".只要我们向"大喇叭"喊一句话(发送一个消息),它就会向所有"听众"传送过去(嗯,聊天室就是如此).

从上可知,当我们做一个基于UDP广播的聊天室程序时,所以我们就不需要任何的服务端程序做数据中转(因为我们已有交换机或路由帮我们广播了),只要是在同一个网络下就可以加入我们的聊天室.

程序主要由两个模块组成,ChatServer与ChatClient.
ChatServer : 聊天服务端,别被名字误会,它的功能主要是用于接收广播数据.比如其它人发送的聊天内容我们就是通过其进行接收的.
ChatClient  : 联系客户端,它的主功主要是用于发送广播数据,比如我们的聊天内容就是通过其发送的.


ChatServer的原理:
当启动ChatServer服务时,ChatServer将会在本地监听一个端口(默认为65432),并加入到"224.224.224.224"广播组.在这里大家要注意,"224.224.224.224"只是一个广播组标识,并不是网络上的某台机,也就是说这个IP地址并不存在的.这样做的目的,主要是向交换机或路由申请将你的机注册为"224.224.224.224"广播组成员,这样你才可以接收广播消息.也许你会问这个IP地址是怎么来的?这是因为多路广播地址的范围是224.0.0.0 到239.255.255.255之间,所以我们可以从中取一个地址给我们的程序用即可.当加入到广播组后ChatServer将进入异步接收数据过程,并在接收到有数据时通过事件通知上一级进行处理.

ChatClient的原理:
ChatClient比较简单,它只是用于发送广播数据,也就是将数据发送到广播组"224.224.224.224"中.

以下是应用程序的简单界面.



源码下载:
你可以自由的对源码进行任何修改.但请不要删除我的标识.谢谢:)
/Files/kingthy/UDPChatRoom.rar

标签: UDP
posted @ 2008-05-24 16:24 Kingthy 阅读(7496) 评论(22) 编辑 收藏

恩,不错,学习。
 回复 引用   
#3楼 2008-05-24 18:56 micYng
cool:)
 回复 引用 查看   
#4楼 2008-05-24 21:33 Zhuang miao      
拿来看看,把标识改下 :-)哈哈
 回复 引用 查看   
#5楼 2008-05-24 21:43 沛沛      
拿来看看,把标识改下
然后去卖钱

 回复 引用 查看   
#6楼[楼主] 2008-05-24 22:11 Kingthy      
@梦想中的城市
@micYng

谢谢支持:)

 回复 引用 查看   
#7楼 2008-05-24 22:36 seek      
不错,本人前段时间写过一个基于TCP连接的聊天程序(参见本人blog置顶文章),不过作者的OO思想很不错。赞一个。
 回复 引用 查看   
#8楼[楼主] 2008-05-24 23:37 Kingthy      
@seek
呵呵,谢谢.你的程序我也刚看了:)

 回复 引用   
#9楼 2008-05-27 18:26 迷你狐[未注册用户]
不错!
自带的局域网聊天小软件
 回复 引用   
#11楼 2008-06-04 15:04 shj[未注册用户]
可以实现在不同VLAN间的聊天吗?
 回复 引用 查看   
#12楼[楼主] 2008-06-05 09:16 Kingthy      
@迷你狐
谢谢支持
@shj
暂时不支持.因为用的是UDP广播.不同网段下是广播不了的.

 回复 引用   
#13楼 2008-06-23 16:58 李海亭[未注册用户]
成心希望每一位来客,如果发现有不文明聊天者,一律踢出,不讲情面。
希望你们好好珍惜。谢谢。

 回复 引用 查看   
#14楼 2008-08-30 17:02 lexus      
对于udp的初级问题想请教一下:
对于组播的服务器,需要注册一个端口A,还要一个组播的地址,

对于接收端需要设置什么呢,只要监听本地直的端口A就可以了吗?

 回复 引用 查看   
#15楼[楼主] 2008-08-30 17:21 Kingthy      
@lexus

接收端与发送端基本没有什么区分.

 回复 引用 查看   
#16楼 2009-03-23 16:36 米虫      
楼主很NB
关注并感谢!

 回复 引用 查看   
#17楼 2009-08-06 11:00 12号      
现在有个问题请教下,我用你的程序在我们的局域网里面跑了下,昨天用的都很正常,能看到自己上线和同事上线,并且互相都能聊天,但是今天我运行这个聊天程序,却看不到自己上线,也看不到我同事。但是我的同事却能看到他自己上线。我们直接是两个交换机,网段都是一样的。
 回复 引用 查看   
#18楼 2009-08-29 21:55 Foolant      

楼主很NB!

下载回来的时候, 用"224.224.224.224"那个IP不给我编译,我用的是VS2008 Express,网上查了下,改成"224.0.0.1" 可以了,不知道为什么,后来再编译,主窗口出不来了.结果我把public RoomForm()
{...}里面的代码都贴到Form_Load()里面去,只留一个InitializeComponent();却有可以了,好奇怪.

可能是我的编译环境设置的问题还是什么,不懂.不过,楼主的程序是网上可以找到的udp广播演示最完善的了,特此感谢.

 回复 引用   
#19楼 2009-10-10 17:10 king46782009[未注册用户]
下不下来啊,麻烦给发一份学习哈。
majun4678@163.com

 回复 引用 查看   
#20楼[楼主] 2009-10-13 09:52 Kingthy      
@king46782009
上面不是已提供下载链接了吗?

 回复 引用 查看   
#21楼[楼主] 2009-10-13 09:53 Kingthy      
@Foolant
可能VS版本不对导致的

 回复 引用 查看   
#22楼 2011-06-10 19:09 jayccc      
如果能有教程就好了..


初学者路过..