📄 bridge.cpp
字号:
#include <stdio.h>
#include <iostream.h>
#include <string.h>
typedef struct bridge
{
char source[4];
int port;
bridge *next;
}bridge; //转发表的数据结构
class net_bridge
{
bridge *t;
public:
net_bridge();
~net_bridge();
void check_to(char*,char*,int); //查找接受点的端口
int check_from(char*,int); //查找发送点是否在转发表中
void insertion(char*,int); //将新发送点的信息插入转发表中
void print(); //打印转发表
};
net_bridge :: net_bridge()
{
t = NULL;
}
net_bridge :: ~net_bridge()
{
delete []t;
}
void net_bridge :: check_to(char *from, char *to, int num)
{
bridge *key;
key = t;
if(strcmp(from, to) == 0)
{
cout << "frame from " << from << " to " << to << " arriving at port " << num << " is discarded." << endl;
return;
}
while(key != NULL)
{
if(strcmp(key->source, to) == 0) //在表中找到该节点
{
if(num == key->port) //接受的节点和发送节点在同一端口
cout << "frame from " << from << " to " << to << " arriving at port " << num << " is discarded." << endl;
else
cout << "frame from " << from << " to " << to << " arriving at port " << num << " is forwarded." << endl;
return;
}
key = key->next;
}
//在转发表找不到接受节点
cout << "frame from " << from << " to " << to << " arriving at port " << num << " is flooded." << endl;
}
int net_bridge :: check_from(char *from,int port)
{
bridge *key;
for(key=t; key != NULL; key=key->next)
if(strcmp(key->source, from) == 0) //发送节点在转发表中
return 0;
cout << "Machine " << from << " is on port " << port << "\n" << endl;
return 1;
}
void net_bridge :: insertion(char *source, int port)
{
int i;
bridge *key = new bridge;
for(i=0; i<4; i++)
key->source[i] = source[i];
key->port = port;
key->next = t;
t = key;
}
void net_bridge :: print()
{
bridge *key;
printf ("最终的转发表输出如下:\n");
for(key=t; key!=NULL; key=key->next)
cout << "来源: " << key->source << " 端口: " << key->port << endl;
}
void main()
{
FILE * fp1;
FILE * fp2;
if ((fp1 = fopen ("data1", "r")) == NULL)
{
printf("不能打开文件\n");
}
if ((fp2 = fopen ("data2", "r")) == NULL)
{
printf("不能打开文件\n");
}
net_bridge b;
char from [4];
char to [4];
char ch1 = fgetc (fp1);
char ch2 = fgetc (fp2);
int mark, i, j;
mark = 1;
i = j = 0;
while(ch1 != EOF || ch2 != EOF)
{
if(mark == 1 && ch1 != EOF)
{
if(ch1 != ' ')
{
if(j == 0)
{
from[i] = ch1;
i++;
ch1 = fgetc (fp1);
}
else if(j == 1)
{
to[i] = ch1;
i++;
ch1 = fgetc (fp1);
}
else if(ch1 != '\n')
ch1 = fgetc (fp1);
else
{
ch1 = fgetc (fp1);
mark = 2;
i = 0;
j = 0;
}
}
else
{
if(j == 1)
{
to[i]= '\0';
b.check_to(from, to, mark);
if(b.check_from(from,mark))
b.insertion(from, mark);
j = 2;
ch1 = fgetc (fp1);
}
else if (j == 0)
{
ch1 = fgetc (fp1);
from[i]= '\0';
j = 1;
i = 0;
}
}
}
if(mark == 2 && ch2 != EOF)
{
if(ch2 != ' ')
{
if(j == 0)
{
from[i] = ch2;
i++;
ch2 = fgetc (fp2);
}
else if(j == 1)
{
to[i] = ch2;
i++;
ch2 = fgetc (fp2);
}
else if(ch2 != '\n')
ch2 = fgetc (fp2);
else
{
ch2 = fgetc (fp2);
mark = 1;
i = 0;
j = 0;
}
}
else
{
if(j == 1)
{
ch2 = fgetc (fp2);
to[i]= '\0';
b.check_to(from, to, mark);
if(b.check_from(from,mark))
b.insertion(from, mark);
j = 2;
}
else if (j == 0)
{
ch2 = fgetc (fp2);
from[i]= '\0';
j = 1;
i = 0;
}
}
}
}
b.print();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -