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

本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2008/05/24/1206457.html ,如需转载请自行联系原作者
相关文章
|
监控 API 数据处理
局域网监控软件中基于UDP协议的数据传输代码实现
本文介绍了在局域网监控系统中,使用UDP协议进行数据传输的实现。示例代码展示了如何用Python创建UDP套接字,接收并处理监控数据。处理后的数据可通过网站API自动提交到网站,例如利用requests库发送HTTP POST请求。这种方法便于实现监控数据的自动化提交和展示,提升效率与安全性。
538 7
|
存储 网络协议 Ubuntu
【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
847 2
用UDP协议实现发送接收的网络聊天室
用UDP协议实现发送接收的网络聊天室
381 0
UDP通信程序练习(实现模拟聊天室)
UDP通信程序练习(实现模拟聊天室)
264 0
|
网络协议 网络架构
RK3399平台开发系列讲解(网络篇)7.26、UDP协议源码分析
RK3399平台开发系列讲解(网络篇)7.26、UDP协议源码分析
295 0
RK3399平台开发系列讲解(网络篇)7.26、UDP协议源码分析
java202303java学习笔记第三十九天Udp协议聊天室
java202303java学习笔记第三十九天Udp协议聊天室
185 0
|
缓存 Java API
Android | UDP的C(Java|Android)/S(Java)通信实战案例(简易聊天室)
Android | UDP的C(Java|Android)/S(Java)通信实战案例(简易聊天室)
java202303java学习笔记第三十九天Udp协议聊天室2
java202303java学习笔记第三十九天Udp协议聊天室2
170 0
|
网络协议 Python
python web开发 网络编程 TCP/IP UDP协议
python web开发 网络编程 TCP/IP UDP协议
487 0
python web开发 网络编程 TCP/IP UDP协议