资源简介
计算机网络课程设计----模拟Ethernet帧发送
代码片段和文件信息
#include
#include
void main (int argcchar* argv[])
{
if(argc!=3)//判断输入的命令行格式是否正确
{
cout <<“请按以下格式输入命令行:framer inputfile outputfile“ < return;
}
fstream file;//创建文件流
file.open(argv[2]ios::in |ios::out |ios::binary |ios::trunc);
//打开指定输出文件,读写方式为以二进制方式可读可写,如文件存在则清除其
for(int i=0;i <7;i++) file.put(char(0xaa));//写入7B前导码
file.put(char(0xab));//写入1B帧前界定符
long pCrcs=file.tellp();//获得当前文件指定指针位置,计算CRC时从这里开始
char
dst_addr[6]={char(0x00)char(0x00)char(0xe4)char(0x86)char(0x3a)
char(0xdc)};
file.write(dst_addrsizeof(dst_addr));
//写入6B目的地址
char
src_addr[6]={char(0x00)char(0x00)char(0x80)char(0x1a)char(0xe6)
char(0x65)};
file.write(src_addrsizeof(src_addr));
//写入6B源地址
ifstream infile;//创建输入文件流
infile.open(argv[1]ios::binary);//打开指定输入文件
infile.seekg(0ios::end);//将文件读指针移到末尾
short length=(short)infile.tellg();//获得位置偏移量,即为输入文件长度
file.put(char(length/256));//将该长度写入数据长度字段(2B)
file.put(char(length%256));
char* data=new char[length];
infile.seekg(0ios::beg);
infile.read(datalength);//从输入文件中读出所有数据至data中
file.write(datalength);//将data中数据写入输出文件
infile.close();//关闭输入文件
delete data;//回收data
if(length <46) for(int i=0;i <46-length;i++) file.put(char(0x00));
//数据字段不足46B的部分用0填充
long pCrc=file.tellp();
//获得当前位置,计算后的CRC码将写到这个位置
file.put(char(0x00));
//数据后补1B的0,用于crc计算
short total=short(file.tellp())-(short)pCrcs;
//需要进行计算的数据长度
file.seekg(pCrcsios::beg);
//将读指针指向目的地址字段,从这里开始crc计算
unsigned char crc=0; //初始余数为0
while(total--)
{
unsigned char temp;
file.get(temp); //读1B的数据
//以下模拟数据除以100000111的二进制除法过程
for(unsigned char i=(unsigned char)0x80;i>0;i>>=1)
{
if(crc&0x80)
{
crc<<=1;
if(temp&i) crc^=0x01;
//将输入数据相应位的值递补到余数末位
crc^=0x07;
//进行除法运算(即减去除数的低8位:00000111)
}
else
{
crc<<=1;
if(temp&i) crc^=0x01;
//将输入数据相应位的值递补到余数末位
}
}
}
file.seekp(pCrcios::beg);
file.put(crc);
cout<<“帧文件“< file.close(); //关闭文件
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2989 2008-12-25 10:55 模拟Ethernet帧发送\新建 文本文档 (5).txt
文件 3563 2008-12-25 11:06 模拟Ethernet帧发送\新建 文本文档.txt
文件 951296 2008-12-25 12:32 模拟Ethernet帧发送\模拟Ethernet帧的发送过程.doc
文件 3619 2008-12-25 12:34 模拟Ethernet帧发送\模拟Ethernet帧的发送过程.dsp
文件 41984 2008-12-25 12:44 模拟Ethernet帧发送\Debug\vc60.idb
文件 61440 2008-12-25 12:43 模拟Ethernet帧发送\Debug\vc60.pdb
文件 265684 2008-12-25 12:34 模拟Ethernet帧发送\Debug\模拟Ethernet帧的发送过程.pch
文件 11881 2008-12-25 12:43 模拟Ethernet帧发送\Debug\模拟Ethernet帧的发送过程.obj
文件 271544 2008-12-25 12:44 模拟Ethernet帧发送\Debug\模拟Ethernet帧的发送过程.ilk
文件 229519 2008-12-25 12:44 模拟Ethernet帧发送\Debug\模拟Ethernet帧的发送过程.exe
文件 459776 2008-12-25 12:44 模拟Ethernet帧发送\Debug\模拟Ethernet帧的发送过程.pdb
文件 33792 2008-12-25 12:45 模拟Ethernet帧发送\模拟Ethernet帧的发送过程.ncb
文件 836 2008-12-25 12:44 模拟Ethernet帧发送\模拟Ethernet帧的发送过程.plg
文件 2514 2008-12-25 12:43 模拟Ethernet帧发送\模拟Ethernet帧的发送过程.cpp
文件 48640 2008-12-25 12:45 模拟Ethernet帧发送\模拟Ethernet帧的发送过程.opt
文件 556 2008-12-25 12:45 模拟Ethernet帧发送\模拟Ethernet帧的发送过程.dsw
目录 0 2008-12-25 12:34 模拟Ethernet帧发送\Debug
目录 0 2008-12-25 10:55 模拟Ethernet帧发送
----------- --------- ---------- ----- ----
2389633 18
- 上一篇:mil-std-202g
- 下一篇:cuda 权威指南习题答案及coda
评论
共有 条评论