|
摘要: 在C/S 模式中,服务器端往往是设计的重点。为了测试服务器的性能,不得不使用大量的计算机作为客户端。在实际情况中,往往无法提供大量的计算机用以测试,同时,这也是资源的浪费,为了解决这个问题,本文提出了模拟多用户客户端的设计方法,并给出详细代码说明。
关键字:多用户 客户端 连接队列
1. 概述
在C/S 模式中,服务器端往往是设计的重点。一般来说,服务器的能够承受的连接数量是衡量一个服务器性能好坏的重要标准,为了测试服务器能够承受的连接数,我们必须使用多台客户机来测试他的性能.可是,很多情况下,我们没有那么多的机器,同时使用多台机器进行测试也是浪费资源,为此,我们设计了模拟多用户客户端程序来解决这个问题。
本文采用MFC的CSocket类在.NET平台上进行设计.所谓的模拟多用户就是用一个客户端程序来建立多个与服务器的连接,就好像多个客户端与服务器进行连接一样。设计的重点是:
程序能够生成用户指定的数目的连接;
用户可以在建立的连接中任意指定某个连接进行通信;
用户可以随意更换连接进行通信测试,每个连接不会互相混淆,尤其是在读写数据的时候,不能张冠李戴;
用户可以随意指定断开某个连接,而不会影响其他连接。
那么这么多的连接究竟如何管理呢?
首先,我们要有一种数据结构来描述每个连接的详细情况。本文采用了结构体。
自定义结构体struct socket_info
| { CSocket* s_client; //保存用户的SOCKET值 u_long client_addr; //保存用户网络地址 CString username; //用户昵称 int id; //连接号 } ; |
然后,使用C++的模板类CList来管理这些连接。以后所做的所有事情就是对这个链表的操作。
2.设计步骤:
2.1创建一个基于对话框的工程CClientDlg.在MFC应用程序向导中选中windows 套接字。
2.2给对话框添加菜单,并添加菜单项,包括配置服务器、用户登陆、退出、通信、断开连接。
2.3添加"配置服务器"响应函数OnServerConfserver(),调出服务器配置对话框Server Configure。输入服务器的IP地址和端口号。
2.4添加"用户登陆"响应函数,输入用户名和连接数,系统根据用户输入的想要建立的连接数,自动生产连接并将其放入链表中。
2.5 添加"通信"响应函数OnCommunication(),调出通信对话框,如图1所示。点击"发送",发送数据;点击"接收",接收数据;点击"断开该连接",关闭socket,并从链表中删除该连接。
2.6 添加"退出"菜单响应函数。遍历整个连接队列,将所有的连接断开并删除队列中所有结构体,将队列清空。