亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? frameparser.cpp

?? 主要原理是應用數據鏈路層幀結構的知識與文件訪問控制的方法
?? CPP
字號:
/*******************************************************************************
 *	文件名稱:FrameParser.cpp
 *	摘    要:通過打開已封裝好多個以太包幀結構的文件進行以太網幀結構解析并打印
 *	單    位:軟件學院
 *	作    者:姚旺
 *	學    號:2120070369
 *	完成日期:2006年10月23日
 *******************************************************************************/



/******************
 * 頭文件列表:
 ******************/

#include "stdafx.h"


/******************
 * 定義常量:
 ******************/

#define CORRECT 0		//用于CRC效驗正確時的返回值


/**********************
 * 引用的命名空間列表:
 **********************/

using namespace System;


/****************************
 * 全局變量聲明及初始化列表:
 ****************************/

int g_nCount=0;			//全局變量g_nCount記錄幀個數


/*******************
 * 函數聲明列表:
 *******************/

void fnReadFrame(IO::FileStream ^fsFile);						//讀一幀并操作
void fnWriteArrayBytes(array<Byte> ^byBytes,bool bDash);		//打印二進制形式數據組
Byte fnCRCcheck(array<Byte> ^byPCrc,Byte byCRCcode);			//CRC校驗
Byte fnBinaryDiv(array<Byte> ^byPDiv);							//二進制除法



/*******************
 * 函數定義列表:
 *******************/

/**********************************************************************
 * 主函數主要通過調用fnReadFrame函數實現程序的“以太網幀結構解析”功能。
 *
 *		輸入參數:
 *			args	命令行的參數數組。
 *
 **********************************************************************/

int main(array<String ^> ^args)
{

	/*******************************************************
	* 命令行參數檢測:
	*		參數是否正確。
	* 
	********************************************************/

	if(args->Length != 1)				//判斷參數數量,不正確則退出
	{
		Console::WriteLine("參數不正確,正確格式為FrameParser [inputfile]。\n請按任意鍵退出...");
		Console::ReadKey(true);			//等待用戶任意鍵繼續
		return 0;
	}
	if(!IO::File::Exists(args[0]))		//判斷參數所指定文件是否存在,不存在則退出
	{
		Console::WriteLine("文件{0}不存在。\n請按任意鍵退出...",args[0]);
		Console::ReadKey(true);			//等待用戶任意鍵繼續
		return 0;
	}



	/****************************
	 * 變量聲明:
	 ****************************/
	IO::FileStream^ fsFile;				//參數指定的被打開文件流



	/**************************************************************************
	 * 主語句部分:寫入try...catch...finally語句中以增強對錯誤的處理能力。
	 *		1.try部分打開文件并調用fnReadFrame函數實現程序功能。
	 *		2.catch部分對錯誤和程序運行中產生的throw進行處理輸出錯誤信息。
	 *		3.finally部分結束程序并已打開的關閉文件。
	 *
	 **************************************************************************/

	try									//當運行中發現錯誤或產生throw時轉到catch
	{
		fsFile=gcnew IO::FileStream(args[0],IO::FileMode::Open);	
										//打開文件流為參數指定文件
		while(fsFile->Position!=fsFile->Length){
			g_nCount++;					//每開始讀一個幀,幀數量加1
			fnReadFrame(fsFile);		//調用fnReadFrame函數對當前位置的幀進行讀取等操作
		}
	}
	catch(::Exception^ e)			
	{
		Console::WriteLine();
		Console::WriteLine(e->Message);	//打印出錯誤細節
	}
	finally
	{
		Console::WriteLine("請按任意鍵退出...");
		Console::ReadKey(true);			//等待用戶任意鍵繼續
		fsFile->Close();				//關閉文件
	}
	return 0;
}



/**************************************************************************
 * 本函數按要求打印bytes中字段為十六進制形式。
 *
 *		輸入參數:
 *			byBytes	被打印的8位無符號數據組。
 *			bDash		是否在數據組間打印符號“-”。	
 *
 **************************************************************************/

void fnWriteArrayBytes(array<Byte> ^byBytes,bool bDash)	
{

	/******************************************************************
	 * 按byBytes數組個數循環:每次循環以十六進制形式打印一個字節的數據。
   	 ******************************************************************/

	for(short int i=0;i<byBytes->Length;i++)					
	{
		Console::Write("{0:X2}"+(bDash?"-":" "),byBytes[i]);	//結合bDash判斷打印當前一個字節
	}
	Console::Write("\b \n");									//消除最后一個bDash或空格并換行
}



/**************************************************************************
 * 本函數進行二進制除法,將參數pDiv除以生成式10000111并返回余數。
 *
 *		輸入參數:
 *			byPDiv		進行二進制除法的被除數。
 *
 *		返回類型:
 *			Byte		二進制除法完成后的余數。
 *
 **************************************************************************/

Byte fnBinaryDiv(array<Byte> ^byPDiv)		
{

	/************************
	 * 變量聲明及初始化列表:
	 ************************/

	Byte byCrc=0;												//定義Byte型存放余數



	/*******************************************************
	 * 根據被除數長度進行除法循環:

		1.每次循環讀取一個字節進行處理。
		2.對這一個字節處理要進行8次循環。
		3.當前字節處理完后若后面還有數據,回到步驟1,否則到4。
		4.全部完成后結束本函數,返回余數值byCrc。

   	 *******************************************************/

	for(int i=0;i < byPDiv->Length;i++)					
	{
		for(Byte j=(Byte) 0x80;j>0;j>>=1)						//進行8次循環,以完成一個字節的操作
		{
			if(byCrc&0x80)										//高位為1則進行除法
			{
				byCrc<<=1;										//左移一位
				if(byPDiv[i]&j) byCrc^=0x01;					//將輸入數據相應位的值遞補到余數末位
				byCrc^=0x07;									//除法運算
			}
			else
			{
				byCrc<<=1;										//左移一位
				if(byPDiv[i]&j) byCrc^=0x01;					//將輸入數據相應位的值遞補到余數末位
			}
		}
	}
	return byCrc;												//返回余數值
}



/***************************************************************************
 * 本函數進行CRC校驗,校驗過程中通過調用fnBinaryDiv函數實現二進制除法。
 *
 *		輸入參數:
 *			byPCrc		被校驗的目標字段(不包括CRC校驗碼本身)。
 *			byCRCcode	幀中得到的CRC校驗碼。
 *
 *		返回類型:
 *			Byte		若CRC校驗正確則返回CORRECT,否則返回正確的CRC校驗碼。
 *
 ***************************************************************************/

Byte fnCRCcheck(array<Byte> ^byPCrc,Byte byCRCcode)		
{

	/************************
	 * 變量聲明及初始化列表:
	 ************************/

	array<Byte> ^byPDiv=gcnew array<Byte>(byPCrc->Length+1);	//初始化新的Byte數組存
	byPCrc->CopyTo(byPDiv,0);									//放byPCrc和byCRCcode
	byPDiv[byPCrc->Length]=byCRCcode;							//合并的數組以進行校驗



	/**************************************************************************
	 * 主語句部分:
	 *
	 *		1.調用fnBinaryDiv對byPDiv進行二進制除法。
	 *		2.若有余數則接受的幀不正確,并返回正確的CRC檢驗碼;否則返回CORRECT。
	 *
	 **************************************************************************/

	if(fnBinaryDiv(byPDiv))														
	{
		byPDiv[byPCrc->Length]=0;					//byPDiv數組最后一個字節置零以存放正確的CRC校驗碼
		return fnBinaryDiv(byPDiv);					//算出正確的CRC校驗碼并返回
	}
	else  return CORRECT;							//若無余數則幀正確
}



/**********************************************************************
 * 本函數對當前位置的幀進行讀取,打印各字段,判斷CRC等操作。
 *
 *		輸入參數:
 *			fsFile		被讀取的文件流。
 *
 **********************************************************************/

void fnReadFrame(IO::FileStream ^fsFile)	
{

	/************************
	 * 變量聲明及初始化列表:
	 ************************/

	array<String ^> ^szErrors={						//初始化各種錯誤信息
		"異常:已讀寫到文件尾,后續數據丟失。"};	
	array<String ^> ^szHeaders={					//初始化各標題行字符串
		"前導碼:","幀前定界符:","目的地址:",
		"源地址:","長度字段:","數據字段:",
		"CRC校驗(正確):","CRC校驗(錯誤):",
		"狀態:Accept","狀態:Discard","序號:",
		"應為:"};						
	array<int> ^nCodeCount={7,1,6,6,2};				//初始化int數組存放對應szHeaders數組前五次讀取時應讀取的字節數量
	array<Byte> ^byBytes;							//用于存放每次讀取的內容的字節型數組
	int nPStart=0,nPLength=0;						//用于記錄進行CRC效驗的字段內容在文件中的開始位置和長度
	int nContextLen=0;								//數據字段長度
	array<Char>^ cChars;							//數據字段內容
	array<Byte>^ byCRCcode=gcnew array<Byte>(1);	//幀中讀取的CRC效驗碼
	Byte byNCRCcode;								//值為0時標記byCRCcode正確,否則存放重新校驗產生的正確CRC效驗碼



	/**************************************************************************
	 * 主語句部分:
	 *
	 *		1.打印“序號”行。
	 *		2.for循環中調用fnWriteArrayBytes函數打印當前幀的“序號”行后的五行。
	 *		3.打印“數據字段”行。
	 *		4.讀取CRC碼并調用fnCRCcheck函數校驗,并打印“CRC校驗”行。
	 *
	 **************************************************************************/

	Console::WriteLine("{0}{1}",szHeaders[10],g_nCount);		//打印當前幀第一行“序號”行



	/**************************************************************************
	 * for循環:調用fnWriteArrayBytes函數打印當前幀的“序號”行后的五行:
	 *			"前導碼:","幀前定界符:","目的地址:","源地址:","長度字段:"。
	 **************************************************************************/

	for(Byte i=0;i<5;i++)								
	{
		if(i==2) nPStart=(int)fsFile->Position;					//開始讀"目的地址"時記錄nPStart
		byBytes=gcnew array<Byte>(nCodeCount[i]);				//創建以當前行要讀入字節數為數組數量的新的byBytes實例
		if(fsFile->Read(byBytes,0,nCodeCount[i])<byBytes->Length)	
																//從文件中讀取nCodeCount[i]個字節填充byBytes
		{
			throw gcnew IO::EndOfStreamException(szErrors[0]);	//若讀取字節數不足則拋出異常
		}
														
		Console::Write(szHeaders[i]);							//打印相應標題
		fnWriteArrayBytes(byBytes,1<i && i<4);					//調用fnWriteArrayBytes函數以打印相應十六進制形式字段
	}



	/**************************************************************************
	 * 打印“數據字段”行。
	 **************************************************************************/

	nContextLen=Convert::ToChar(byBytes[0])*256+
		Convert::ToChar(byBytes[1]);							//計算數據字段長度
	Console::Write(szHeaders[5]);								//打印數據字段標題
	byBytes=gcnew array<Byte>(nContextLen);	
	if(fsFile->Read(byBytes,0,nContextLen)<byBytes->Length)		//將數據字段內容讀入新的byBytes實例
	{
		throw gcnew IO::EndOfStreamException(szErrors[0]);		//若讀取字節數不足則拋出異常
	}
	Text::Decoder^ dcTmp = 
		Text::Encoding::Default->GetDecoder();					//獲取系統當前ANSI代碼頁的編碼的解碼器
	cChars= gcnew array<Char>(nContextLen);
	dcTmp->GetChars(byBytes, 0, byBytes->Length, cChars, 0 );
																//將byBytes中數據字段內容解碼為當前系統ANSI代碼后存入cChars中
	for(int i=0;i<nContextLen;i++)								//打印數據字段內容
	{
		Console::Write("{0}",cChars[i]);
	}
	Console::WriteLine();



	/**************************************************************************
	 * 讀取CRC碼并調用fnCRCcheck函數校驗,并打印“CRC校驗”行。
	 **************************************************************************/

	if(46-nContextLen>0)	fsFile->Seek(46-nContextLen,IO::SeekOrigin::Current);	
																//若數據字段長度不足最小的46B則讀完剩下的,使文件指針指向CRC效驗碼
	nPLength=(int)fsFile->Position-nPStart;						//計算nPLength
	int nTmp=fsFile->ReadByte();								//讀入CRC校驗碼到臨時變量nTmp中
	if(nTmp==-1)												//若已到文件尾,即沒有正確讀入則
	{
		throw gcnew IO::EndOfStreamException(szErrors[0]);		//拋出異常
	}
	else
	{
		byCRCcode[0]=(Byte)nTmp;								//否則將nTmp賦值到byCRCcode
	}
	byBytes=gcnew array<Byte>(nPLength);						//從文件讀
	fsFile->Seek(nPStart,IO::SeekOrigin::Begin);				//入被進行CRC
	fsFile->Read(byBytes,0,nPLength);							//校驗的字段

	fsFile->Position=nPStart+nPLength+1;						//讀文件指針恢復到當前幀結束位置
	byNCRCcode=fnCRCcheck(byBytes,byCRCcode[0]);				//檢驗CRC并返回正確時值為0或錯誤時為正確CRC值

	if(byNCRCcode)					//若CRC錯誤進行的打印
	{
		Console::WriteLine("{0}{1:X2} {2}{3:X2}",szHeaders[7],byCRCcode[0],szHeaders[11],byNCRCcode);
		Console::WriteLine(szHeaders[9]);
	}
	else							//若CRC正確進行的打印
	{
		Console::WriteLine("{0}{1:X2}",szHeaders[6],byCRCcode[0]);
		Console::WriteLine(szHeaders[8]);
	}
	Console::WriteLine();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区视频在线| 91亚洲永久精品| 精品久久久久久综合日本欧美| 日韩成人av影视| 欧美大片在线观看| 国产精品一级二级三级| 国产女人水真多18毛片18精品视频| 岛国一区二区在线观看| 国产精品久久久久四虎| 97久久人人超碰| 午夜精品aaa| 精品国产一区二区三区av性色| 国产一区二区h| 日韩一区在线看| 欧美日韩高清在线| 韩国精品主播一区二区在线观看 | 亚洲乱码中文字幕| 欧美日韩一区二区三区四区五区| 天堂资源在线中文精品| 2021中文字幕一区亚洲| 91麻豆免费视频| 秋霞午夜鲁丝一区二区老狼| 26uuu亚洲| 日本高清不卡一区| 看电视剧不卡顿的网站| 中文字幕一区二区三区在线观看| 欧美色图片你懂的| 国产米奇在线777精品观看| 亚洲精品高清视频在线观看| 91精品国产免费| www.视频一区| 美女视频一区二区| 亚洲欧美日韩在线不卡| 日韩欧美国产三级| 91蜜桃婷婷狠狠久久综合9色| 青娱乐精品视频| 亚洲视频在线观看三级| 精品国产乱码久久久久久影片| 色婷婷国产精品久久包臀| 精品一区二区三区免费播放| 一区二区高清视频在线观看| 久久久久久97三级| 欧美日韩免费观看一区三区| 国产成人日日夜夜| 91麻豆精品国产| 亚洲综合网站在线观看| 精品国产乱码久久久久久久| 欧美日韩一二三| 99re热这里只有精品免费视频 | 成人欧美一区二区三区| 日韩一二在线观看| 欧美撒尿777hd撒尿| 99免费精品在线观看| 麻豆91精品视频| 亚洲18女电影在线观看| 亚洲三级在线播放| 国产女同互慰高潮91漫画| 日韩三级高清在线| 欧美日韩国产免费一区二区| 91尤物视频在线观看| 成人免费视频app| 国产精品一区二区黑丝| 麻豆成人免费电影| 日本欧美在线看| 五月天丁香久久| 亚洲午夜久久久久久久久久久| 亚洲视频每日更新| 中文字幕综合网| 国产精品美日韩| 欧美韩日一区二区三区| 欧美国产亚洲另类动漫| 久久久欧美精品sm网站| 久久亚洲综合色一区二区三区| 日韩欧美卡一卡二| 精品日韩成人av| 久久综合九色综合97婷婷女人 | 成人免费av网站| 国产精品美女久久久久久| 久久久久久亚洲综合| 精品国产成人在线影院| 91精品国产综合久久久久| 9191久久久久久久久久久| 欧美人xxxx| 欧美激情一区二区三区全黄| 久久亚洲一级片| 国产午夜亚洲精品午夜鲁丝片| 久久精品欧美日韩| 国产午夜精品理论片a级大结局 | 日韩欧美国产小视频| 日韩视频永久免费| 欧美成人三级在线| 国产人久久人人人人爽| 国产精品国产三级国产aⅴ原创 | 亚洲第一搞黄网站| 日韩综合一区二区| 国产毛片一区二区| 91在线你懂得| 欧美日韩中文国产| 精品国产自在久精品国产| 中文字幕欧美区| 一区二区三区四区五区视频在线观看| 亚洲一二三四久久| 久久精品国产99久久6| 国产高清精品在线| 91污在线观看| 欧美久久一区二区| 久久久av毛片精品| 亚洲天堂中文字幕| 奇米影视一区二区三区小说| 国产电影一区在线| 欧美性videosxxxxx| 欧美成人aa大片| 亚洲男人天堂av网| 麻豆精品一区二区av白丝在线 | 99免费精品在线| 7777精品久久久大香线蕉 | 欧美日韩在线不卡| 亚洲精品一区二区三区影院 | 在线视频一区二区三| 欧美哺乳videos| 一区二区三区自拍| 日本中文字幕一区二区有限公司| 国产精品456| 欧美人牲a欧美精品| 中文字幕免费不卡在线| 日韩 欧美一区二区三区| 成人高清免费观看| 日韩一区二区三免费高清| 国产精品美女久久久久久久久| 日韩av一二三| 91蜜桃免费观看视频| 久久久久久久一区| 亚洲国产精品久久艾草纯爱| 岛国av在线一区| 日韩欧美一区二区视频| 亚洲一区二区在线免费观看视频| 国产老女人精品毛片久久| 91精品国产麻豆国产自产在线 | 亚洲桃色在线一区| 久久精品噜噜噜成人88aⅴ| 91黄色激情网站| 国产精品国产三级国产a| 国产在线看一区| 欧美一二三在线| 午夜久久电影网| 91国在线观看| 亚洲色图视频免费播放| 成人高清视频免费观看| 久久久久久久av麻豆果冻| 亚洲成人免费视频| 9人人澡人人爽人人精品| 国产欧美日韩精品a在线观看| 蜜臀av一区二区在线观看 | 蜜桃久久久久久久| 欧美日韩国产一级片| 亚洲一区二区三区激情| 99国产精品视频免费观看| 国产精品免费视频网站| 粉嫩嫩av羞羞动漫久久久| 久久免费精品国产久精品久久久久| 欧美aⅴ一区二区三区视频| 欧美三级日本三级少妇99| 亚洲一区日韩精品中文字幕| 91精品福利视频| 夜夜嗨av一区二区三区四季av| 99精品国产99久久久久久白柏| 中文字幕色av一区二区三区| 99re热视频精品| 亚洲欧美日韩在线| 欧洲国产伦久久久久久久| 亚洲精品乱码久久久久久| 91网站最新网址| 亚洲一级片在线观看| 欧美精品久久一区二区三区| 亚洲444eee在线观看| 欧美一区二区观看视频| 美洲天堂一区二卡三卡四卡视频| 精品捆绑美女sm三区| 国产在线精品一区二区| 国产欧美中文在线| jlzzjlzz亚洲女人18| 亚洲精品日日夜夜| 欧美影院一区二区| 亚洲国产日韩a在线播放性色| 91美女在线视频| 肉色丝袜一区二区| 精品国产免费人成电影在线观看四季| 激情成人综合网| 国产精品女上位| 欧美色手机在线观看| 免费成人你懂的| 国产精品久久久久久久岛一牛影视| 91免费国产视频网站| 亚洲成av人影院在线观看网| 日韩精品一区二区在线观看| 高清不卡在线观看| 亚洲图片一区二区| 久久综合色婷婷| 色婷婷亚洲综合| 久久精品国产99国产|