• 大小:
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-30
  • 语言: 其他
  • 标签:

资源简介

计算机网络课程设计----模拟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


评论

共有 条评论