class Switcher //交换机类 { public:
void SetName(char sname[]); char name[20]; Switcher();
void ComputeMACTable(); void SendData();
void RecvData(int p_num,Message str_me); void PrintTable(); void SaveMAC();
Switcher(int s_pnum,char* s_name ); friend Computer; virtual ~Switcher(); private:
int mess_FromPort; char mess_FromMAC[18]; int PORTNUM; int mess_ToPort; char mess_ToMAC[18]; Message buffer; Recordset Temp;
vector
};
主程序(详细的见程序源代码,有注解) const COMPUTER_NUM=5; void Graph();//打印拓扑图 void Menu();//打印可选菜单 char SelectNum();//等待输入选项 void MakeMessage();//构造消息 void Init();//系统初始化
char* InputMAC();//专门用于输入MAC地址并返回其指针 void SetComputer();//用于设置计算机 void SetSwitcher();//用于设置交换机 void Start();//演示系统运行 void Working();//环境系统工作 //构造演示系统的环境和设备
Switcher sw(5,\实例一个五口的交换机 名:switcher Computer co[COMPUTER_NUM];//定义五台电脑 Message message1;//定义一个消息 int port;//消息从交换机的port端口进入 int from,to;//记录消息的始,终计算机的下标
char MAC[18];//全局MAC Input()对其改变并返回指向它的指针 //主函数 程序入口
int main(int argc,char*[]) {
Init();
Start(); return 0; }
主程序中的部分函数 char SelectNum() {
char error='e'; char ch[2]; ch[0]=getche(); ch[1]=getch();
if(ch[1]=='\\r'||ch[1]=='\\n')//一定要保证第二个从键盘输入的为回车
return ch[0]; else
return error;//否则返回一个error }
void MakeMessage() {
int i=1;
char computer_name[20];
while(i)//确保系统中有源主机,直到输入正确的为至 {
cout<<\选择源主机:\ cin>>computer_name;
for(i=0;i if(!strcmp(co[i].name,computer_name))//找到这台计算机 { from=i;//记录源主机在数组中的下标 port=co[i].port;//源主机所接入的switcher的端口号 break; } } if(i==5) cout<<\输入错误!\\n\ else i=0; } i=1;//同样确保系统中有宿主机,直到输入正确的为至 while(i) { cout<<\选择宿主机:\ cin>>computer_name; for(i=0;i if(!strcmp(co[i].name,computer_name)) { to=i; break; } } if(i==5) cout<<\输入错误!\\n\ else i=0; } strcpy(co[from].mess.FromMAC,co[from].MAC);//构造源主机所发消息的源MAC目标MAC strcpy(co[from].mess.ToMAC,co[to].MAC); port=co[from].port; strcpy(message1.FromMAC,co[from].MAC);//构造系统消息的源MAC目标MAC strcpy(message1.ToMAC,co[to].MAC); cout<<\输入要发送的内容(以@结束):\ cin.getline(message1.Data,1024,'@'); //ASSERT(message1.Data[0]=='\\r');//用宏调试出message1.Data[0]为'\\r' //所以要过滤第一个字符'\\r' for(i=0;i<1024&&message1.Data[i]!='\\0';i++) message1.Data[i]=message1.Data[i+1];