计算机网络课程设计:(第三章)封装Ethernet帧(完整程序代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机网络课程设计

第二章:封装Ethernet帧

完整程序:

#include

#include

void main(int argc,char* argv[])

{

if(argc!=3)

{

cout<<"Please input commmand: EncapFrame input_file

output_file"<

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));

file.put(char(0xab));

long pCrcS=file.tellp();

char

dst_addr[6]={char(0x00),char(0x00),char(0xe4),char(0x86),char(0x3a),char(0xdc)}; file.write(dst_addr,sizeof(dst_addr));

char

src_addr[6]={char(0x00),char(0x00),char(0x80),char(0x1a),char(0xe6),char(0x65)}; file.write(src_addr,sizeof(src_addr));

ifstream infile;

infile.open(argv[1],ios::binary);

infile.seekg(0,ios::end);

short length=(short)infile.tellg();

file.put(char(length/256));

file.put(char(length%256));

char* data=new char[length];

infile.seekg(0,ios::beg);

infile.read(data,length);

file.write(data,length);

infile.close();

delete data;

if(length<46)

for(int i=0;i<46-length;i++)

file.put(char(0x00));

long pCrc=file.tellp();

file.put(char(0x00));

short total=short(file.tellp())-(short)pCrcS;

file.seekg(pCrcS,ios::beg);

unsigned char crc=0;

while(total--)

{

unsigned char temp;

file.get(temp);

for(unsigned char i=(unsigned char)0x80;i>0;i>>=1)

{

if(crc&0x80)

{

crc<<=1;

if(temp&i)

crc^=0x01;

crc^=0x07;

}

else

{

crc<<=1;

if(temp&i)

crc^=0x01;

}

}

}

file.seekp(pCrc,ios::beg);

file.put(crc);

file.seekg(0,ios::beg);

cout<<"Content of ethernet frame: "<

while(!file.eof())

{

unsigned char temp;

file.get(temp);

cout<

}

cout<

file.close();

}

结果:

相关文档
最新文档