如何基于c語(yǔ)言tftp服務(wù)器與客戶端實(shí)現(xiàn)_華清遠(yuǎn)見(jiàn)_第1頁(yè)
如何基于c語(yǔ)言tftp服務(wù)器與客戶端實(shí)現(xiàn)_華清遠(yuǎn)見(jiàn)_第2頁(yè)
如何基于c語(yǔ)言tftp服務(wù)器與客戶端實(shí)現(xiàn)_華清遠(yuǎn)見(jiàn)_第3頁(yè)
如何基于c語(yǔ)言tftp服務(wù)器與客戶端實(shí)現(xiàn)_華清遠(yuǎn)見(jiàn)_第4頁(yè)
如何基于c語(yǔ)言tftp服務(wù)器與客戶端實(shí)現(xiàn)_華清遠(yuǎn)見(jiàn)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、. 如何基于c語(yǔ)言tftp效勞器與客戶端實(shí)現(xiàn)本篇文章主要的容就是教大家,如何基于c語(yǔ)言tftp效勞器與客戶端實(shí)現(xiàn),是非常精彩的容,希望對(duì)大家的學(xué)習(xí)之路有所幫助。TFTP(Trivial File Transfer Protocol,簡(jiǎn)單文件傳輸協(xié)議)是TCP/IP協(xié)議族中的一個(gè)用來(lái)在客戶機(jī)與效勞器之間進(jìn)展簡(jiǎn)單文件傳輸?shù)膮f(xié)議,提供不復(fù)雜、開(kāi)銷不大的文件傳輸效勞。端口號(hào)為69。開(kāi)發(fā)環(huán)境:ubuntu所用知識(shí)點(diǎn):c,socket, tcp/ip協(xié)議A)本實(shí)驗(yàn)主要實(shí)現(xiàn)tftp協(xié)議的效勞器與客戶端。效勞器實(shí)現(xiàn)功能有:1)接收處理客戶端請(qǐng)求,上傳下下載文件2)進(jìn)展用戶驗(yàn)證3)對(duì)傳輸數(shù)據(jù)進(jìn)展加密解密處理4)

2、生成日志文件客戶端實(shí)現(xiàn)功能有:1)向效勞器發(fā)出請(qǐng)求,上傳或下載文件2)對(duì)傳輸數(shù)據(jù)加密解密3)對(duì)用戶信息進(jìn)展MD5加密B)相關(guān)代碼實(shí)現(xiàn):宏定下:#ifndef MAKEWORD#define MAKEWORD(l,h) (unsigned short)(unsigned char)(l)|(unsigned short)(unsigned char)(h)8);/塊號(hào)2個(gè)字節(jié)pos+;bufferpos = (char)num;pos+;return pos;/Data包填充int makedata(unsigned short num,char *data,int datasize,char

3、*buffer,int bufsize)int pos = 0;bufferpos = 0;pos+;bufferpos = TFTP_DATA; /操作碼為03pos+;bufferpos = (char)(num8);/塊號(hào)pos+;bufferpos = (char)num;pos+;memcpy(&bufferpos,data,datasize);/填充數(shù)據(jù)pos = pos + datasize;return pos;/ERROR包填充int makeerr(unsigned short num,char *buffer)int pos=0;bufferpos=0;pos+;buff

4、erpos=TFTP_ERROR; /操作碼為05pos+;bufferpos = (char)(num8); /錯(cuò)誤種類號(hào)pos+;bufferpos = (char)num;pos+;return pos;日志log.c實(shí)現(xiàn)#includestatic char log100; /日志char datetime20; /記錄時(shí)間變量int timeout=2,retran=3; /效勞器參數(shù)void record(int a,struct sockaddr_in *sin,char *file)char tem60;time_t t=time(0); /初始化日歷時(shí)間strftime(da

5、tetime,sizeof(datetime),%y/%m/%d %*,localtime(&t);/將時(shí)間格式化strcat(log,datetime);/將時(shí)間寫入記錄/將字符串格式化bzero(&tem,sizeof(tem);if(a=1)sprintf(tem, 收到來(lái)自 %s 上傳文件 %s 的請(qǐng)求。n,inet_ntoa(sin-sin_addr),file);if(a=2)sprintf(tem, %s 上傳文件 %s 完畢。n,inet_ntoa(sin-sin_addr),file);if(a=3)sprintf(tem, 收到來(lái)自 %s 下載文件 %s的請(qǐng)求。n,inet

6、_ntoa(sin-sin_addr),file);if(a=4)sprintf(tem, %s 下載文件 %s 完畢。n,inet_ntoa(sin-sin_addr),file);if(a=5)sprintf(tem, 出現(xiàn)出錯(cuò),操作中斷。n,inet_ntoa(sin-sin_addr),file);/將具體信息寫入記錄strcat(log,tem);FILE *write;if(write=fopen(log.t*t,a+)=NULL)printf(翻開(kāi)記錄文件失敗n);/將記錄寫入文件fwrite(&log,strlen(log),1,write);fclose(write);bze

7、ro(&log,sizeof(log);加密解密實(shí)現(xiàn)#include#include#includeint decrypt(FILE *in,FILE *out);int encrypt(FILE *in,FILE *out);unsigned char atoh(char *he*str);int encrypt(FILE *in,FILE *out)if(in = NULL | out = NULL)fprintf(stderr,%sn,file error!n);return -1;unsigned char he*;while(fread(&he*,1,1,in)he* = he*0*

8、98;fprintf(out,%02*,he*);return 0;int decrypt(FILE *in,FILE *out)if(in = NULL | out = NULL)fprintf(stderr,%sn,file error!);return -1;unsigned char he*str3;unsigned char he* = 0;int i = 0;while(fread(he*str,2,1,in)he* = atoh(he*str);he* = (he* 0*98);fwrite(&he*,1,1,out);return 0;/* convert string to

9、he* */unsigned char atoh(char *he*str)int i;int he*todec=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;char chtodec = 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;unsigned char he*num = 0;for(i = 0; i sizeof(chtodec); +i)if(he*str0 = chtodeci)he*num += he*todeci*16;for(i = 0; i 65535)blocknum = 0;/最后一包if(ret TFTP_NOTEND

10、_DATALEN)/寫入文件fwrite(&recv_buffer4,1,ret-4,file);flen = flen + ret -4;#ifdef _DEBUG_printf(%s %s %dn, _FILE_, _FUNCTION_, _LINE_);printf(*傳輸完畢,共收到 %d 字節(jié)*n,flen);#endifrewind(file);if(decrypt_file =fopen(decrypt_temp,wb+)=NULL)printf(decrypt file open error n);return;decrypt(file, decrypt_file);fclose(decrypt_file);rename(decrypt_temp, filename);fclose(file);record(2,&sour_addr,filename);return;elsefwrite(&recv_buffer4,1,512,file);flen = flen + 512;#ifdef _DEBUG_printf(%s %s %dn, _FILE_, _FUNCTION_, _LINE_);printf(已收到 %d 字節(jié)n,flen);#endifelse/重新發(fā)送ACK包printf(數(shù)據(jù)包塊號(hào)錯(cuò)誤.n);sendto(sock

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論