开发基于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

Tag标签: UDP
posted @ 2008-05-24 16:24 Kingthy 阅读(2969) 评论(16)  编辑 收藏 网摘 所属分类: C#

  回复  引用    
#1楼2008-05-24 17:20 | 梦想中的城市[未注册用户]
恩,不错,学习。
  回复  引用    
#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 | 迷你狐[未注册用户]
不错!
  回复  引用    
#10楼2008-06-03 00:19 | 局域网聊天工具[未注册用户]
自带的局域网聊天小软件
  回复  引用    
#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
关注并感谢!




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1206457




相关文章:

相关链接: