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

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

?? excute.cpp

?? tftp功能服務器及客戶端的實現
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
				timeFormat,inet_ntoa(RcvAddr.sin_addr),RcvPort,fileandmode);
		::SendMessage(tftpHwnd,WM_DATADISPLAY,0,(LPARAM)strDisplay);
		fwrite(strDisplay,1,strlen(strDisplay),stream);
		
		b=0;
		AckBuf  ABuf;
		DataBuf DBuf;
		ABuf.pcode = htons(ACK);
		DBuf.pcode = htons(DAT);
		//測試打開請求下載文件
		if((pFile = fopen(fileandmode,"r"))!=NULL)
		{	
			//請求文件存在,拒絕覆蓋可以保護用戶文件覆蓋掉 server 上的文件
			SendErrors(6);

			timeNow = CTime::GetCurrentTime();   
			timeFormat=timeNow.Format("%H:%M:%S");

			sprintf(strDisplay,"%s : 服務器存在同名文件 : %s,中止[%s:%d]!\n",
				timeFormat,fileandmode,inet_ntoa(RcvAddr.sin_addr),RcvPort);
			::SendMessage(tftpHwnd,WM_DATADISPLAY,0,(LPARAM)strDisplay);
			fwrite(strDisplay,1,strlen(strDisplay),stream);
			fclose(pFile);
			return;
		}
		CFile *pCFile1;
		//請求文件不存在,為 Client 創建文件
		pCFile1 = new CFile((LPCTSTR)fileandmode, CFile::modeCreate|CFile::modeWrite);
		
		char RcvBuf[1024];

		fd_set SockSet;
		while(1)
		{
			memset(DBuf.buf,0,sizeof(DBuf.buf));
		
			ABuf.block = htons(b);

			timeNow=CTime::GetCurrentTime();   
			timeFormat=timeNow.Format("%H:%M:%S");
			sprintf(strDisplay,"%s : 回送 [%s:%d] 第 %d 號 ACK\n",
				timeFormat,inet_ntoa(RcvAddr.sin_addr),RcvPort,b);
			::SendMessage(tftpHwnd,WM_DATADISPLAY,0,(LPARAM)strDisplay);
			fwrite(strDisplay,1,strlen(strDisplay),stream);
			while(1)
			{
				//發送ACK
				memset(DBuf.buf,0,sizeof(DBuf.buf));
				sendto(SrvSocket,(char*)&ABuf,
					sizeof(ABuf),0,(SOCKADDR*)&RcvAddr,len);
			
				FD_ZERO(&SockSet);
				FD_SET(SrvSocket,&SockSet);
				if(select(SrvSocket,&SockSet,NULL,NULL,&TVal))
				{
					nBytesRcv = recvfrom(SrvSocket,RcvBuf,
						sizeof(RcvBuf),0,(SOCKADDR *)&RcvAddr,&len);
					nBytesRcv -= 4;

					timeNow=CTime::GetCurrentTime();   
					timeFormat=timeNow.Format("%H:%M:%S");

					if(u_short(ntohs(ABuf.block) + 1) != u_short(ntohs(((DataBuf*)RcvBuf)->block)) || 
						ntohs(((DataBuf*)RcvBuf)->pcode) != DAT)
					{
						//DATA 序列號出錯,或不是 DATA 包處理
						if(((ErrorBuf*)RcvBuf)->pcode == ntohs(ERR))
						{
							SetErrMsg(ntohs(((ErrorBuf*)RcvBuf)->ErrorCode));
							return;
						}
						if(timeout == 5)
						{
							//重復五次錯誤 DATA, 中止服務
							sprintf(strDisplay,"%s : 中止 [%s:%d], 出錯重發第 %d 號ACK %d 次\n",
							timeFormat,inet_ntoa(RcvAddr.sin_addr),RcvPort,b,timeout);
							::SendMessage(tftpHwnd,WM_DATADISPLAY,0,(LPARAM)strDisplay);
							fwrite(strDisplay,1,strlen(strDisplay),stream);
							timeout = 0;
							delete pCFile1;
							return;
						}
						
						timeNow=CTime::GetCurrentTime();   
						timeFormat=timeNow.Format("%H:%M:%S");
						sprintf(strDisplay,"%s : 收到 [%s:%d] 第 %d 號 DATA, 重發第 %d 次 ACK\n",timeFormat,
							inet_ntoa(RcvAddr.sin_addr),RcvPort,ntohs(((DataBuf*)RcvBuf)->block),timeout);
						::SendMessage(tftpHwnd,WM_DATADISPLAY,0,(LPARAM)strDisplay);
						fwrite(strDisplay,1,strlen(strDisplay),stream);
						timeout++;
						continue;
					}
					else//right datagram
					{
						sprintf(strDisplay,"%s : 收到 [%s:%d] 第 %d 號 DATA,%d Bytes\n",timeFormat,
						inet_ntoa(RcvAddr.sin_addr),RcvPort,ntohs(((DataBuf*)RcvBuf)->block),nBytesRcv);
						::SendMessage(tftpHwnd,WM_DATADISPLAY,0,(LPARAM)strDisplay);
						fwrite(strDisplay,1,strlen(strDisplay),stream);

						TotalBytes += nBytesRcv;
						pCFile1->Write(((DataBuf*)RcvBuf)->buf,nBytesRcv);
						b = ntohs(((DataBuf*)RcvBuf)->block);
						if(nBytesRcv < 512)
						{	
							//最后一個包,傳送完成
							ABuf.block = htons(b);
							sendto(SrvSocket,(char*)&ABuf,
								sizeof(ABuf),0,(SOCKADDR*)&RcvAddr,len);
							
							timeNow=CTime::GetCurrentTime();   
							timeFormat=timeNow.Format("%H:%M:%S");
							sprintf(strDisplay,"%s : 回送 [%s:%d] 第 %d 號 ACK",
								timeFormat,inet_ntoa(RcvAddr.sin_addr),RcvPort,b);
							::SendMessage(tftpHwnd,WM_DATADISPLAY,0,(LPARAM)strDisplay);
							fwrite(strDisplay,1,strlen(strDisplay),stream);

							delete pCFile1;

							timeNow=CTime::GetCurrentTime();   
							timeFormat=timeNow.Format("%H:%M:%S");

							TotalTime -= timeNow.GetHour();
							if(TotalTime <= 0)
								TotalTime = TotalTime * 60;//傳文件時間不得超過24小時,									
							else						   //否則檢查不出正確耗時
								TotalTime = 24 * 60;
							TotalTime += timeNow.GetMinute() - StartTime.GetMinute();
							TotalTime = TotalTime * 60;

							TotalTime += timeNow.GetSecond() - StartTime.GetSecond();
							if(TotalTime == 0)
								TotalTime = 1;
							sprintf(strDisplay,"%s : [%s:%d]%s上傳完畢: %d Bytes int %d seconds, %d Bytes/s.\n",
									timeFormat,inet_ntoa(RcvAddr.sin_addr),RcvPort,fileandmode,TotalBytes,TotalTime,int(TotalBytes/TotalTime));
							::SendMessage(tftpHwnd,WM_DATADISPLAY,0,(LPARAM)strDisplay);
							fwrite(strDisplay,1,strlen(strDisplay),stream);
							delete pCFile1;
							fclose(stream);
							return;
						}
						timeout = 1;
						break;
					}
				}
				else
				{
					if(timeout == 5)
					{
						//重復五次 select 超時,中止服務
						delete pCFile1;
						timeout = 0;
						sprintf(strDisplay,"%s : 接收 [%s:%d] 第 %d 號 DATA 超時,中止服務!\n",timeFormat,
							inet_ntoa(RcvAddr.sin_addr),RcvPort,ntohs(((DataBuf*)RcvBuf)->block)+1);
						::SendMessage(tftpHwnd,WM_DATADISPLAY,0,(LPARAM)strDisplay);
						fwrite(strDisplay,1,strlen(strDisplay),stream);
						return;
					}
					timeout++;
				}		
			}//if select
		}//while(1)
		break;

	default: 
		SendErrors(0);
		fclose(stream);
		return;
	}

}

void Cexcute::SendErrors(u_short m_ErrorNum)
{
	ErrorBuf EBuf;
	memset(EBuf.ErrMsg,0,100);
	EBuf.pcode = htons(ERR);
	switch(m_ErrorNum)
	{
	case 0:
		strcpy(EBuf.ErrMsg,"Not defined, see error message (if any).\n");
		EBuf.ErrorCode = htons(0);		
		break;
	case 1:
		strcpy(EBuf.ErrMsg,"File not found.\n");
		EBuf.ErrorCode = htons(1);
		break;
	case 2:
		strcpy(EBuf.ErrMsg,"Access violation.\n");
		EBuf.ErrorCode = htons(2);
		break;
	case 3:
		strcpy(EBuf.ErrMsg,"Disk full or allocation exceeded.\n");
		EBuf.ErrorCode = htons(3);
		break;
	case 4:
		strcpy(EBuf.ErrMsg,"Illegal TFTP operation.\n");
		EBuf.ErrorCode = htons(4);
		break;
	case 5:
		strcpy(EBuf.ErrMsg,"Unknown transfer ID.\n");
		EBuf.ErrorCode = htons(5);
		break;
	case 6:
		strcpy(EBuf.ErrMsg,"File already exists.\n");
		EBuf.ErrorCode = htons(6);
		break;
	case 7:
		strcpy(EBuf.ErrMsg,"No such user.\n");
		EBuf.ErrorCode = htons(7);
		break;
	}
	sendto(SrvSocket,(char *)&EBuf,sizeof(ErrorBuf),0,(SOCKADDR*)&RcvAddr,len);
}
//線程結束時,刪除存在節點的記錄
void Cexcute::DeleteRQ(SOCKADDR_IN RcvAddr)
{
	ExistRQ * tmp, *bftmp;
	bftmp = RQHead;
	tmp = bftmp;
	while(tmp != NULL)
	{
		if(RcvAddr.sin_port == tmp->m_Port &&
			RcvAddr.sin_addr.S_un.S_addr == tmp->m_Addr.S_un.S_addr)
		{
			if(bftmp == RQHead)
				RQHead = tmp->next;
			else
				bftmp->next = tmp->next;
			
			delete tmp;
		}
		else
		{
			bftmp = tmp;
			tmp=tmp->next;
		}
	}
}
//顯示錯誤信息函數
void Cexcute::SetErrMsg(u_short ErrNum)
{
	switch(ErrNum)
	{
	case 0:
		sprintf(strDisplay,"Not defined, see error message (if any).\n");		
		break;
	case 1:
		sprintf(strDisplay,"Server Error: File not found.\n");
		break;
	case 2:
		sprintf(strDisplay,"Access violation.\n");
		break;
	case 3:
		sprintf(strDisplay,"Disk full or allocation exceeded.\n");
		break;
	case 4:
		sprintf(strDisplay,"Illegal TFTP operation mode.\n");
		break;
	case 5:
		sprintf(strDisplay,"Unknown transfer ID.\n");
		break;
	case 6:
		sprintf(strDisplay,"Server Error: File already exists.\n");
		break;
	case 7:
		sprintf(strDisplay,"No such user.\n");
		break;
	}
		::SendMessage(tftpHwnd,WM_DATADISPLAY,0,(LPARAM)strDisplay);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情艳妇裸体舞| 欧美精品日韩一本| 色www精品视频在线观看| 7799精品视频| 成人欧美一区二区三区白人| 日韩高清在线观看| 成人激情校园春色| 欧美一级二级三级蜜桃| 综合欧美亚洲日本| 韩国v欧美v日本v亚洲v| 欧美日韩成人综合天天影院| 国产欧美日韩亚州综合| 麻豆精品在线观看| 91毛片在线观看| 亚洲国产精品黑人久久久| 国产一区欧美一区| 91精品午夜视频| 亚洲国产另类av| 欧美xingq一区二区| 97精品久久久久中文字幕| 欧美亚州韩日在线看免费版国语版| 91精品免费在线观看| 午夜欧美大尺度福利影院在线看| 欧美色视频在线| 国产日韩一级二级三级| 国产欧美精品一区| 中文字幕高清一区| 在线观看日韩av先锋影音电影院| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美一级高清片| 日韩1区2区日韩1区2区| 欧美无乱码久久久免费午夜一区| 日韩三级中文字幕| eeuss鲁片一区二区三区在线看| 在线亚洲人成电影网站色www| 亚洲一区二区三区精品在线| 国产a区久久久| 天使萌一区二区三区免费观看| 国产日韩欧美在线一区| 日韩视频在线你懂得| 日本乱人伦一区| 99久久久精品免费观看国产蜜| 日本中文一区二区三区| 国产成人在线视频免费播放| 激情欧美一区二区| 国产美女久久久久| 日韩av网站在线观看| 亚洲国产综合人成综合网站| 亚洲色图.com| 中文字幕一区免费在线观看| 亚洲国产精品二十页| 日韩欧美电影一区| 日韩一区二区三区免费看 | 91丝袜美女网| 国产久卡久卡久卡久卡视频精品| 亚洲人成网站在线| 久久久久久久电影| 日韩三级精品电影久久久 | 7777精品伊人久久久大香线蕉超级流畅| 欧美色综合网站| 色诱亚洲精品久久久久久| 成人黄色软件下载| 欧美性猛片aaaaaaa做受| 欧美日韩免费电影| 在线视频一区二区免费| 国产亚洲人成网站| 国产精品传媒视频| 亚洲精品一卡二卡| 国产美女久久久久| 中文字幕综合网| 欧美伦理电影网| 懂色中文一区二区在线播放| 亚洲人成7777| 日韩一区二区三区视频在线观看| 丰满少妇在线播放bd日韩电影| 亚洲精品一二三| 精品国产欧美一区二区| www.亚洲免费av| 欧美aaa在线| 国产精品久久久久久久岛一牛影视 | 亚洲精品福利视频网站| 91精品黄色片免费大全| 国产成都精品91一区二区三| 亚洲大片免费看| 国产精品久久三区| 日韩一级片在线播放| 日本高清免费不卡视频| 国产主播一区二区| 午夜久久久久久电影| 国产精品成人午夜| 精品国产污网站| 欧美日韩大陆一区二区| 色综合天天综合色综合av | 午夜精品一区二区三区电影天堂| 久久人人爽爽爽人久久久| 欧美日韩免费不卡视频一区二区三区| 国产精品一二三四五| 免费久久精品视频| 亚洲国产精品嫩草影院| 欧美国产精品一区| 亚洲精品在线免费播放| 欧美另类久久久品| 在线观看中文字幕不卡| av一区二区三区四区| 激情久久久久久久久久久久久久久久| 亚洲欧美日韩国产手机在线| 国产欧美日韩精品a在线观看| 日韩一区二区三免费高清| 欧美在线观看视频在线| 91理论电影在线观看| 暴力调教一区二区三区| 国产69精品久久99不卡| 国产精品一二三| 国产尤物一区二区在线| 老司机精品视频导航| 日本欧美一区二区| 午夜成人免费视频| 天堂va蜜桃一区二区三区| 五月婷婷激情综合| 日韩精品亚洲一区二区三区免费| 亚洲美女免费视频| 1000精品久久久久久久久| 欧美高清在线精品一区| 日本一区二区三区四区| 欧美经典一区二区| 国产精品美日韩| 亚洲视频在线一区二区| 亚洲日本va午夜在线影院| 亚洲欧美日本韩国| 午夜欧美在线一二页| 麻豆精品在线播放| 国产不卡一区视频| 波波电影院一区二区三区| 色婷婷香蕉在线一区二区| 欧美性生活影院| 日韩一区二区三区视频在线 | 久久er99热精品一区二区| 极品瑜伽女神91| 丁香六月久久综合狠狠色| 99国产精品国产精品毛片| 欧美在线播放高清精品| 欧美精品在线视频| 26uuu久久综合| 亚洲欧美在线观看| 丝袜亚洲另类丝袜在线| 国内久久精品视频| 91久久久免费一区二区| 欧美一区二区成人6969| 久久精品网站免费观看| 亚洲人成7777| 老司机免费视频一区二区三区| 成人免费毛片嘿嘿连载视频| 欧美中文字幕久久| 久久久国产午夜精品| 亚洲免费看黄网站| 久久疯狂做爰流白浆xx| av成人老司机| 欧美电视剧在线看免费| 中文字幕一区二区三区在线播放| 香蕉成人伊视频在线观看| 国产精品综合在线视频| 欧美三区在线视频| 国产欧美日韩久久| 免费成人美女在线观看| av一区二区三区黑人| 精品粉嫩aⅴ一区二区三区四区| 中文字幕在线不卡| 美国毛片一区二区| 欧美在线免费视屏| 国产精品视频免费| 狠狠色狠狠色综合日日91app| 日本高清免费不卡视频| 国产欧美一区二区三区在线老狼| 午夜久久福利影院| 色婷婷久久久久swag精品| 久久一区二区三区四区| 性欧美疯狂xxxxbbbb| 99在线精品观看| 国产欧美va欧美不卡在线| 丝袜脚交一区二区| 在线观看一区日韩| 亚洲欧洲中文日韩久久av乱码| 国产又粗又猛又爽又黄91精品| 91麻豆精品国产91久久久| 一区二区三区高清不卡| 波多野结衣在线一区| 日韩欧美自拍偷拍| 日本欧洲一区二区| 欧美女孩性生活视频| 亚洲午夜久久久久久久久久久| 波多野结衣的一区二区三区| 国产亚洲精品超碰| 国产一区二区三区四区在线观看| 91精品国产欧美一区二区18 | 欧美日韩日日骚| 夜夜精品浪潮av一区二区三区| 99re成人在线| 亚洲色图欧美在线| 色一情一乱一乱一91av| 亚洲乱码国产乱码精品精98午夜|