影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

Linux下基于socket的文件傳輸程序設(shè)計(jì)

上傳人:仙*** 文檔編號(hào):29078570 上傳時(shí)間:2021-09-25 格式:DOC 頁(yè)數(shù):24 大?。?92KB
收藏 版權(quán)申訴 舉報(bào) 下載
Linux下基于socket的文件傳輸程序設(shè)計(jì)_第1頁(yè)
第1頁(yè) / 共24頁(yè)
Linux下基于socket的文件傳輸程序設(shè)計(jì)_第2頁(yè)
第2頁(yè) / 共24頁(yè)
Linux下基于socket的文件傳輸程序設(shè)計(jì)_第3頁(yè)
第3頁(yè) / 共24頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《Linux下基于socket的文件傳輸程序設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《Linux下基于socket的文件傳輸程序設(shè)計(jì)(24頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 課 程 設(shè) 計(jì) 課程名稱(chēng)Linux下基于socket的文件傳輸程序設(shè)計(jì) 學(xué)生學(xué)院 信息工程學(xué)院 專(zhuān)業(yè)班級(jí) 學(xué) 號(hào) 學(xué)生姓名 指導(dǎo)教師 2013 年 12月 27日 引言 在互聯(lián)網(wǎng)已經(jīng)基本普及的情況下,人們?cè)絹?lái)越依賴于信息網(wǎng)絡(luò)。因?yàn)榛ヂ?lián)網(wǎng)的使用,我們可以大大的節(jié)省了我們的時(shí)間及成本。所以文件、信息的傳輸已經(jīng)是人們生活

2、中不可缺少的東西。而現(xiàn)在主流的應(yīng)用軟件都是基于WINDOWS平臺(tái)上開(kāi)發(fā)運(yùn)行的。 Linux操作系統(tǒng)本身具有非常高的安全性,不易感染病毒(這是WINDOWS系統(tǒng)所不能比擬的),而且可移植性強(qiáng),應(yīng)用于大多數(shù)的服務(wù)器。所以我們應(yīng)該多開(kāi)發(fā)出適合人們使用的應(yīng)用軟件,使得Linux更加好的為廣大網(wǎng)民使用以保障自身的安全性。 本課設(shè)主要介紹在Linux下的文件傳輸原理及功能,雖然不能與主流傳輸軟件的功能相比,但是卻是占用的資源比它要少 1課設(shè)背景分析 這次課程設(shè)計(jì)的要求是在以Linux為內(nèi)核的操作系統(tǒng)下,實(shí)現(xiàn)多線程文件傳輸系統(tǒng)功能模塊。系統(tǒng)模塊分為服務(wù)器和客戶端兩部分,客戶端實(shí)現(xiàn)對(duì)文件的上傳

3、、下載和查看服務(wù)器默認(rèn)路徑下的文件列表;服務(wù)器可以對(duì)文件進(jìn)行管理操作,包括創(chuàng)建、刪除和重命名等。 多線程文件傳輸是一種一對(duì)多或者多對(duì)多的關(guān)系,一般是一個(gè)服務(wù)器對(duì)應(yīng)著多個(gè)客戶端??蛻舳送ㄟ^(guò)socket連接服務(wù)器,服務(wù)器要為客戶端創(chuàng)建一個(gè)單獨(dú)進(jìn)程(線程)監(jiān)聽(tīng)每個(gè)客戶端的請(qǐng)求。 創(chuàng)建好連接之后文件就可以通過(guò)流的形式傳輸。linux內(nèi)核中為我們提供了兩種不同形式的讀寫(xiě)流,包括read()、write()和send()、recv()??蛻魴C(jī)對(duì)文件的查看指令也是通過(guò)流傳遞給服務(wù)器,服務(wù)器根據(jù)請(qǐng)求類(lèi)型返回不同相應(yīng)流。 根據(jù)socket原理和特點(diǎn)繪畫(huà)出鏈接流程圖,將客戶機(jī)與服務(wù)器的相互通信劃分為不同的

4、模塊,每個(gè)模塊負(fù)責(zé)獨(dú)立的功能項(xiàng)。服務(wù)器輸入指令管理目錄下的文件,create filename是創(chuàng)建文件命令,rename oldname newname是刪除文命令,delete filename 是刪除文件命令,同時(shí)監(jiān)聽(tīng)著客戶端的請(qǐng)求;客戶端向服務(wù)器發(fā)送上傳、下載和查看請(qǐng)求,從而得到不同的相應(yīng),包括將文件下載到當(dāng)前路徑下,從當(dāng)前路徑下上傳文件給服務(wù)器,列出服務(wù)器的文件列表。 2網(wǎng)絡(luò)通信原理及socket簡(jiǎn)介 2.1網(wǎng)絡(luò)通信原理(TCP) 國(guó)際標(biāo)準(zhǔn)化組織(ISO)在1978年提出開(kāi)放系統(tǒng)互連參考模型(OSI:open system interconnection refere

5、nce mode),該模型是設(shè)計(jì)和描述網(wǎng)絡(luò)通信的基本框架。OSI采用分層的額結(jié)構(gòu)化技術(shù)將通信網(wǎng)絡(luò)分為7層,從低到高為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層、應(yīng)用層。 TCP/IP參考模型是由美國(guó)國(guó)防部創(chuàng)建,且發(fā)展至今最成功的通信協(xié)議模型,與OSI模型對(duì)應(yīng),它將網(wǎng)絡(luò)功能分為4層,包括網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層,每一層都有對(duì)應(yīng)的協(xié)議。在傳輸層的主要協(xié)議是TCP協(xié)議和UDP協(xié)議。 socket連接就是基于TCP協(xié)議。TCP是一種可靠地?cái)?shù)據(jù)傳輸協(xié)議。 它為應(yīng)用程序提供可靠的通信連接。適合于一次傳輸大批數(shù)據(jù)的情況。并適用于要求得到響應(yīng)的應(yīng)用程序并通過(guò)3次握手。

6、 其數(shù)據(jù)包頭格式為: 2.2 socket簡(jiǎn)介 在Linux中的網(wǎng)絡(luò)編程是通過(guò)socket接口來(lái)進(jìn)行的。socket是一種特殊的I/O接口,它也是一種文件描述符。它是一種常用的進(jìn)程之間通信機(jī)制,通過(guò)它不僅能實(shí)現(xiàn)本地機(jī)器上的進(jìn)程之間的通信,而且通過(guò)網(wǎng)絡(luò)能夠在不同機(jī)器上的進(jìn)程之間進(jìn)行通信。 每一個(gè)socket都用一個(gè)半相關(guān)描述{協(xié)議、本地地址、本地端口}來(lái)表示;一個(gè)完整的套接字則用一個(gè)相關(guān)描述{協(xié)議、本地地址、本地端口、遠(yuǎn)程地址、遠(yuǎn)程端口}來(lái)表示。socket也有一個(gè)類(lèi)似于打開(kāi)文件的函數(shù)調(diào)用,該函數(shù)返回一個(gè)整型的socket描述符,隨后的連接建立、數(shù)據(jù)傳輸

7、等操作都是通過(guò)socket來(lái)實(shí)現(xiàn)的。 socket是一種套接口,它把網(wǎng)絡(luò)地址和端口號(hào)信息放在一個(gè)結(jié)構(gòu)體中,也就是套接字地址結(jié)構(gòu)。 結(jié)構(gòu)圖如下: 套接口與ip、端口號(hào)的關(guān)系 套接口 168.222.222.222 9999 222.222.222.222 9999 Ip地址 端口號(hào) 通用套接口地址數(shù)據(jù)結(jié)構(gòu)定義在頭文件中,形式如下: struct sockaddr { uint8_t sa_len; sa_family_t sa_family; char sa_da

8、ta[14]; }; IPv4套接口地址數(shù)據(jù)結(jié)構(gòu)以socketaddr_in命名,定義在頭文件中,形式如下: struct socketaddr_in { unit8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; } 下圖是TCP套接口通信工作流程圖: 結(jié)束連接通知 應(yīng)答信號(hào) 服務(wù)請(qǐng)求 三次握手過(guò)程 掛起,直到有客戶機(jī)的連接請(qǐng)求

9、Socket() 客戶機(jī)進(jìn)程 服務(wù)器進(jìn)程 Bind() Listen() Accept() Recv() Send() Connect() Send() Recv() Close() Socket() Recv() TCP 套接口通信工作過(guò)程 通信工作的大致流程: 1) 服務(wù)器先用socket()函數(shù)來(lái)建立一個(gè)套接口,用這個(gè)套接口完成通信的監(jiān)聽(tīng)及數(shù)據(jù)的收發(fā)。 2) 服務(wù)器用bind()函數(shù)來(lái)綁定一個(gè)端口號(hào)和ip地址,是套接口與指定的端口號(hào)和ip關(guān)聯(lián)。 3) 服務(wù)器調(diào)用linsten()函數(shù),是服務(wù)器的端口和Ip處于監(jiān)聽(tīng)狀態(tài),等待網(wǎng)絡(luò)中某一個(gè)客戶機(jī)的連接請(qǐng)

10、求。 4) 客戶機(jī)用socket()函數(shù)建立一個(gè)套接口,設(shè)定遠(yuǎn)程ip和端口 5) 客戶機(jī)調(diào)用connect()函數(shù)連接遠(yuǎn)程計(jì)算機(jī)指定的端口。 6) 服務(wù)器調(diào)用accept()函數(shù)來(lái)接受遠(yuǎn)程計(jì)算機(jī)的連接請(qǐng)求,建立起與客戶機(jī)之間的通信連接。 7) 建立連接之后,客戶機(jī)用write()函數(shù)(或send())想socket中寫(xiě)入數(shù)據(jù)。也可以用read()函數(shù)(或recv()函數(shù))賭氣服務(wù)器發(fā)送來(lái)的數(shù)據(jù)。 8) 服務(wù)器用read()函數(shù)(或recv()函數(shù))來(lái)讀取客戶機(jī)發(fā)來(lái)的數(shù)據(jù),也可以用write()函數(shù)(或send()函數(shù))來(lái)發(fā)送數(shù)據(jù)。 9) 完成通信以后,使用close()函數(shù)關(guān)閉so

11、cket連接。 3詳細(xì)設(shè)計(jì)過(guò)程 3.1服務(wù)器端創(chuàng)建監(jiān)聽(tīng)與文件管理 服務(wù)器負(fù)責(zé)的功能模塊主要有兩部分,一是對(duì)連接進(jìn)來(lái)客戶端所有線程的管理和服務(wù)器目錄下的文件管理;二是創(chuàng)建線程來(lái)單獨(dú)監(jiān)聽(tīng)客戶端的動(dòng)作。為了便于管理,我們創(chuàng)建兩個(gè)user.txt和client.txt兩個(gè)文檔來(lái)分別負(fù)責(zé)服務(wù)器的連接和客戶端的連接。user.txt中存放了服務(wù)器名和密碼。client.txt存放了連接客戶端名字和密碼。 我們首先對(duì)服務(wù)器的創(chuàng)建有個(gè)監(jiān)測(cè),即在啟動(dòng)時(shí)先核實(shí)服務(wù)器的所有者username和密碼password,將輸入的用戶、密碼與user.txt中的用戶密碼比較,匹配成功則同意啟動(dòng),否則re

12、turn -1表失敗。 接著創(chuàng)建一個(gè)socket套接口,綁定Ip設(shè)置客戶端的最大連接數(shù)為10,然后創(chuàng)建一個(gè)sever線程來(lái)實(shí)現(xiàn)對(duì)服務(wù)器本身監(jiān)聽(tīng)動(dòng)作。主體代碼見(jiàn)最后 接下來(lái)創(chuàng)建線程完成對(duì)客戶端的監(jiān)聽(tīng) 監(jiān)聽(tīng)等待連接: while(1) { sockdata = accept(sockfd,(struct sockaddr*)0,(int*)0); ……………. 我們定義結(jié)構(gòu)體: struct client_t { pthread_t tid; int conn_fd; int used; char name[20]; }p_cli

13、ent[10]; 來(lái)存放每個(gè)客戶端的socket信息、線程標(biāo)識(shí)、使用號(hào)、連接號(hào)和客戶名。創(chuàng)建線程實(shí)現(xiàn)單獨(dú)監(jiān)聽(tīng): p_client[i].conn_fd = sockdata; p_client[i].used = i; strcpy(p_client[i].name , client_name); pthread_create(&p_client[i].tid,NULL,&client_conn,&p_client[i]) 接下來(lái)是線程client_conn()的功能 監(jiān)聽(tīng)客戶端的功能完成。 3.2客戶端連接與文件傳輸 在客戶端這邊我們同樣適

14、用了檢測(cè)機(jī)制,運(yùn)行客戶機(jī)時(shí)要將用戶名、密碼以及ip地址和端口號(hào)作為參數(shù)輸進(jìn)來(lái),先建立與服務(wù)器的連接,然后將用戶名和密碼發(fā)送到服務(wù)端檢測(cè),如果檢測(cè)失敗則接收到一條拒絕信息,連接斷開(kāi),如果檢測(cè)成功則接收到一條確認(rèn)信息,雙方通信開(kāi)始。 主體代碼見(jiàn)最后: 到此為止我們已經(jīng)實(shí)現(xiàn)了服務(wù)器和客戶端的主體功能,具體代碼查看附錄文件夾。 具體代碼如下: 服務(wù)端: #include #include #include #include #include #includ

15、e #include #include #include #include #define MAXBUF 256 /*-------start of fileList functions----------*/ int fileSize(char fileName[]); //文件信息 typedef struct fileinfo{ char name[256]; char fullName[1024];

16、 int size; time_t mod_time; char type[10]; }fileinfo; //文件列表 typedef struct filelist { fileinfo file; struct filelist* nextfile; }fileList; //function getfilelist //輸入目錄名 //輸出目錄下的文件列表頭指針 fileList * getFileList(char name[1024]) { fileList *head=NULL; fileL

17、ist *cur=NULL; char name_temp[1024]; //目錄 DIR * dir; //目錄環(huán)境 struct dirent *dir_env; //文件描述 struct stat stat_file; //初始化head head =(fileList*)malloc(sizeof(fileList)); head->nextfile = NULL; //打開(kāi)目錄 dir=opendir(name); while(dir_env=r

18、eaddir(dir))//讀文件描述表 { //排除.和.. if(strcmp(dir_env->d_name,".")==0 || strcmp(dir_env->d_name,"..")==0) continue; //把文件全名保存到新變量 strcpy(name_temp,name); strcat(name_temp,dir_env->d_name); stat(name_temp,&stat_file);//獲取文件描述信息

19、 //將文件信息存放到鏈表中 //產(chǎn)生臨時(shí)節(jié)點(diǎn) cur=(fileList*)malloc(sizeof(fileList)); //cur賦值 //文件名,fullName=cur_dir+"name"; strcpy(cur->file.name,dir_env->d_name); strcpy(cur->file.fullName,name_temp); //文件大小 //文件類(lèi)型 if( S_ISDIR(stat_

20、file.st_mode)) { cur->file.size = 0; strcpy(cur->file.type,"mulu"); strcat(cur->file.fullName,"/"); }else { cur->file.size = stat_file.st_size; strcpy(cur->file.type,"file"); } //修改日期

21、 cur->file.mod_time = ctime(&stat_file.st_mtime); //將臨時(shí)節(jié)點(diǎn)插入head中 if(head->nextfile ==NULL) { head->nextfile = cur; cur->nextfile = NULL; }else { cur->nextfile = head->nextfile; head->nextfile = cur;

22、 } } return head; } //showAllNode //輸入:目錄 //輸出:次目錄下所有的文件,和所有目錄之下的文件 void showAllNode(fileList *head) { fileList * temp; //數(shù)組索引 int i=0,j=0; //如果head為空,直接返回 fileList * headArray[1024]; if(head == NULL) return ; //輸出當(dāng)前目錄 prin

23、tf("%s ",head->file.fullName); printf("\n"); //輸出head中的文件 temp =head->nextfile; char fileListString[MAXBUF]; FILE *file; char _temp[30]; strcpy(_temp,"temp.txt"); file=fopen(_temp,"w"); if(file==NULL){ printf("The file is created failed!"); exit(1); }

24、while(temp) { //判斷是否為文件,是文件顯示文件 //若為目錄,將目錄名放入隊(duì)列,求隊(duì)列目錄 if (strcmp(temp->file.type,"file")==0) { bzero(fileListString,MAXBUF); printf("file:%s ",temp->file.fullName); strcat(fileListString,temp->file.fullName); strcat(fileListStr

25、ing,"\n"); while ((strlen(fileListString)) > 0) { int write_length = fwrite(fileListString, sizeof(char), strlen(fileListString), file); if (write_length < strlen(fileListString)) { printf("File Write into Failed\n"); break; } bzero(fileListString, MAXBUF);

26、 } }else{ if(i>=1024) { printf("there are too many direcotry\n"); return; } //頭節(jié)點(diǎn)初始化 headArray[i] = getFileList(temp->file.fullName); //頭節(jié)點(diǎn)名稱(chēng) strcpy(headArray[i]-

27、>file.fullName,temp->file.fullName); i++; } temp=temp->nextfile; } fclose(file); //對(duì)目錄隊(duì)列中目錄使用遞歸,直到結(jié)束 for(j=0;j

28、 //判斷head 是否為空,若為空直接返回 if(head == NULL)return; //若不為空則顯示它的內(nèi)容 while(head) { printf("%s\n",head->file.fullName); head = head->nextfile; } return ; } /*----------end of fileList functions-----------*/ void main() { int opt=1; while(opt!=0){

29、 printf("Please choose your choice bellow:\n"); printf("1:Manage the files.\n"); printf("2:Connect the clients.\n"); char window[2]; scanf("%s",window); if((strncmp(window,"1",1))==0){ printf("Please input your choice bellow:\n"); printf("1: Create a new file.\n"); printf

30、("2: Delete a file.\n"); printf("3: Rename a known file.\n"); char choice[2]; scanf("%s",choice); if((strncmp(choice,"1",1))==0){ printf("Please input the new file name:"); char filename[20]; scanf("%s",filename); FILE *file; file=fopen(filename,"w"); if

31、(file==NULL){ printf("The file created failed!\n"); } else{ printf("The file has created successfully.\n"); } continue; } else if((strncmp(choice,"2",1))==0){ printf("Please input the file name with the file path you want to delete:\n"); char

32、filename[20]; scanf("%s",filename); remove(filename); printf("The file has been deleted successfully.\n"); continue; } else{ printf("Please input the file name you want to rename:\n"); char _old[20]; scanf("%s",_old); printf("Please input the new file

33、name:\n"); char _new[20]; scanf("%s",_new); int result = rename( _old, _new ); if( result != 0 ) printf( "Could not rename %s\n", _old ); else printf( "File %s renamed to %s\n", _old, _new ); continue; } } else{ int ssock; int

34、clen; struct sockaddr_in client_addr,server_addr; char buf[MAXBUF]; if((ssock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))<0){ perror("socket error:"); exit(1); } printf("Run the server successfully.\nAnd now waiting the client comming...\n"); mem

35、set(&server_addr,0,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_addr.s_addr=inet_addr("127.0.0.1"); server_addr.sin_port=htons(6669); if(bind(ssock,(struct sockaddr *)&server_addr,sizeof(server_addr))<0){ perror("bind error:"); exi

36、t(1); } int window=1; while(window!=0){ clen=sizeof(client_addr); recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr,&clen); printf("%s\n",buf); if((strncmp(buf, "0", 1)) == 0) { if((strncmp(buf, "0yy", 7)) == 0)

37、 { strcpy(buf,"yes"); printf("Its username and right.\n"); } else { strcpy(buf,"no"); printf("Its username but wrong.\n"); } sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr ,sizeof(client_addr));

38、 } else if((strncmp(buf, "1", 1)) == 0) { if((strncmp(buf, "1123", 4)) == 0) { strcpy(buf,"yes"); sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr ,sizeof(client_addr)); printf("Its password and right.\n"); recvf

39、rom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr,&clen); if((strncmp(buf, "upload", 5)) == 0){ printf("The client is going to upload file...\n"); recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr,&clen);//get filename printf("The filename of

40、 the file uploaded by user is:%s\n",buf); FILE *file; char temp[30]; strcpy(temp,"recieve/"); strcat(temp,buf); file=fopen(temp,"w"); if(file==NULL){ printf("The file is created failed!"); exit(1); } bzero(buf, MAXBUF); r

41、ecvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr,&clen); while (strlen(buf) > 0) { int write_length = fwrite(buf, sizeof(char), strlen(buf), file); if (write_length < strlen(buf)) { printf("File Write into Failed\n");

42、 break; } bzero(buf, MAXBUF); } fclose(file); printf("Recieve file already success.\n"); } else{ printf("The client wants to download file.\n"); printf("Send the filelist to the client...\n"); //filelist fileL

43、ist *mylist; //顯示的目錄 char name[1024]="recieve/"; //取得目錄下文件 //頭指針傳遞的目錄或者文件名 mylist =getFileList(name); strcpy(mylist->file.fullName,name); //顯示目錄下文件 //showList(mylist); //顯示目錄下所有文件 showAllNode(mylist); //send fileList

44、 FILE *file; char temp[30]; strcpy(temp,"temp.txt"); file=fopen(temp,"r"); if(file==NULL){ printf("The file cannot open!"); exit(1); } else{ printf("\nThe fileListString open successfully!\n"); bzero(buf,MAXBUF); in

45、t lengsize = 0; while((lengsize = fread(buf,1,MAXBUF,file)) > 0) { printf("lengsize = %d\n",lengsize); sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr,sizeof(server_addr)); printf("%s\n",buf); bzero(buf, MAXBUF); }

46、 printf("The fileListString has been sent to the client already.\n"); } fclose(file); bzero(buf, MAXBUF); recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr,&clen); printf("The client choosen file: %s\n",buf); strcpy(temp,"r

47、ecieve/"); strcat(temp,buf); file=fopen(temp,"r"); if(file==NULL){ printf("The file is created failed!"); exit(1); } else{ printf("The file open successfully!\n"); printf("The file is downloading to the client now...\n");

48、bzero(buf,MAXBUF); int lengsize = 0; while((lengsize = fread(buf,1,MAXBUF,file)) > 0) { printf("lengsize = %d\n",lengsize); sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr,sizeof(server_addr)); bzero(buf, MAXBUF);

49、 } printf("The file has been downloaded already.\n"); } fclose(file); exit(1);//還可以顯示此時(shí)的文件目錄信息,檢查是否完成了上傳 } close(ssock); window=0; } else { strcpy(buf,"no"); sendto(ssock,(void *)buf,MAXBUF,0

50、,(struct sockaddr*)&client_addr ,sizeof(client_addr)); printf("Its password but wrong.\n"); } } } } } } 客服端: #include #include #include #include #include #include #include

51、ys/socket.h> #include #include #define PORT 6669 #define MAXBUF 256 int check_passwd(int sockfd); int tra_file(int sockfd); void main ( int argc, char *argv[]) { char username[20]; char password[20]; char temp[21]; char window; printf("Please i

52、nput your selections bellow:\n"); printf("1:Login the server with your username and password\n"); printf("2:Registe a newly user now.\n"); printf("0:Exit the system.\n"); window=getchar(); while(window>0){ if(window==1){ int key=0; printf("Please input your username:"); sca

53、nf("%s",username); printf("%s\n",username); int ssock; int clen; struct sockaddr_in client_addr,server_addr; char buf[MAXBUF]; if((ssock = socket(AF_INET,SOCK_DGRAM,0))<0){ perror("socket error:你暫時(shí)不能登錄服務(wù)器server,請(qǐng)稍后再登錄...\n"); exit(1); } else{ while

54、(key==0){ memset(&server_addr,0,sizeof(server_addr)); server_addr.sin_family =AF_INET; server_addr.sin_addr.s_addr=inet_addr("127.0.0.1"); server_addr.sin_port=htons(PORT); strcpy(temp,"0"); strcat(temp,username); strcpy(buf,temp); sendto(ssock

55、,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,sizeof(server_addr)); printf("你已經(jīng)發(fā)送username(%s)給server請(qǐng)等待響應(yīng)...\n",buf); clen=sizeof(client_addr); recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,&clen); printf("你已經(jīng)得到了server的響應(yīng):%s\n",buf); if((strn

56、cmp(buf, "yes", 3)) != 0) { printf("The username you inputed is wrong!\n"); window=1; close(ssock); printf("Please input your username:"); scanf("%s",username); printf("%s\n",username); } else{ close(ssock); key=1; }

57、 } } printf("Please input your password:"); scanf("%s",password); printf("%s\n",password); if((ssock = socket(AF_INET,SOCK_DGRAM,0))<0){ perror("socket error:你暫時(shí)不能登錄服務(wù)器server,請(qǐng)稍后再登錄...\n"); exit(1); } else{ key=0; while(key==0){ memset(&s

58、erver_addr,0,sizeof(server_addr)); server_addr.sin_family =AF_INET; server_addr.sin_addr.s_addr=inet_addr("127.0.0.1"); server_addr.sin_port=htons(PORT); bzero(temp,21); strcpy(temp,"1"); printf("%s\n",temp); strcat(temp,password); strcpy(buf,temp);

59、 sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,sizeof(server_addr)); printf("你已經(jīng)發(fā)送password(%s)給server請(qǐng)等待響應(yīng)...\n",buf); clen=sizeof(client_addr); recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,&clen); printf("你已經(jīng)得到了server的響應(yīng):%s\n",buf

60、); if((strncmp(buf, "yes", 3)) != 0) { printf("The password you inputed is wrong!\n"); window=1; close(ssock); printf("Please input your password:"); scanf("%s",password); printf("%s\n",password); } else{ //file list display an

61、d file choose printf("Please choose eithor upload file or download file bellow:\n"); printf("1:upload file.\n"); printf("2:download file.\n"); char choose[2]; scanf("%s",choose); char path[20]; char filename[20]; if((strncmp(choose,"1",1))==0){

62、 printf("please input the path you want to upload end with /:\n"); scanf("%s",path); printf("Please input the file you want to upload:\n"); strcpy(buf,"upload"); sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,sizeof(server_addr)); sca

63、nf("%s",filename); strcat(path,filename); strcpy(buf,filename); sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,sizeof(server_addr)); FILE *file; file=fopen(path,"r"); if(file==NULL){ perror("The file open failed!");

64、exit(1); } else{ printf("The file open successfully!\n"); printf("The file is uploading now...\n"); bzero(buf,MAXBUF); int lengsize = 0; while((lengsize = fread(buf,1,MAXBUF,file)) > 0) { printf("lengsize = %d\n",lengsiz

65、e); sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,sizeof(server_addr)); bzero(buf, MAXBUF); } printf("The file has been uploaded already.\n"); exit(1);//還可以顯示此時(shí)的文件目錄信息,檢查是否完成了上傳 } } else{ bze

66、ro(buf,MAXBUF); strcpy(buf,"download"); sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,sizeof(server_addr)); printf("The filelist supported by server is bellow:\n"); bzero(buf,MAXBUF); recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,&clen); printf("%s\n",buf); printf("Please input the file you want to download :\n"); scanf("%s",filename); strcpy(buf,filename);

展開(kāi)閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!