陈家雄
摘 要 提出了一种基于UDP协议的C/S连接管理的实现方法,并给出了具体的思路和详细的服务器及客户端的实现代码。
关键词 自定义消息,托盘图标,注册表,INI文件
在开发C/S(Client/Server)架构的软件系统时,常常需要服务器在客户端连接时动态地向客户端发送某些参数值,客户端根据服务器发来的参数值进行下一步操作,例如动态生成数据库连接字符串来连接数据库等;同时,还常常需要在服务器端控制客户端的连接数量,从而达到保护软件开发者相关利益的目的。以下为基于UDP协议的客户端连接管理的具体思路和详细实现方法,使用的集成开发环境为Borland C++Builder 6.0。
一、理论依据
UDP(User Datagram Protocol,用户数据报协议)属于TCP/IP的传输层协议。UDP协议在设计时的简单性,保证了UDP在工作时的高效性和低延时性。因此,在服务质量较高的网络中(如局域网),UDP可以高效地工作。与同属TCP/IP传输层协议的TCP(Transfer Control Protocol, 传输控制协议)相比较,TCP是面向连接的,使用各种措施尽量保证数据传输过程中的可靠性;而UDP则是无连接的。虽然UDP的可靠性比TCP差(如表1所示),但UDP却免去了TCP建立连接和关闭连接时需要进行的握手过程,非常适合应用于要求高效传输数据或数据传输量小的场合。
表1 UDP与TCP的比较
比较项目 |
UDP |
TCP |
是否连接 |
无连接 |
连接 |
传输可靠性 |
不可靠 |
可靠 |
应用场合 |
传输少量数据 |
传输大量数据 |
速度 |
快 |
慢 |
正因为UDP和TCP的应用场合不同,所以不能仅从可靠性的差别来判断UDP与TCP哪一个更好。就局域网应用而言,综合权衡数据传输的流量、传输的效率和开发的便利性,并且考虑到UDP支持广播与多播,而TCP并不支持,实现C/S连接管理时采用UDP协议应是最佳选择。
二、自定义协议
因为UDP只负责数据在网络中的传输,系统并不能自动识别UDP所传输信息的真正含义,因此还需要自定义一套简单的请求-应答协议,以实现服务器和客户端之间的信息交互。请求-应答协议的定义如图1所示。
图1 自定义请求-应答协议
图1中“SearchClient”和“SearchClientReturn”等均为自定义的服务器与客户端进行信息交互的命令。
三、服务器端开发
启动Borland C++Builder 6.0,从菜单“FileàNewàApplication”新建一个工程。修改主窗口的某些属性,如表2所示。
|