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

socket文件傳輸源代碼要點

上傳人:靚*** 文檔編號:25985753 上傳時間:2021-08-04 格式:DOCX 頁數(shù):28 大小:321.73KB
收藏 版權(quán)申訴 舉報 下載
socket文件傳輸源代碼要點_第1頁
第1頁 / 共28頁
socket文件傳輸源代碼要點_第2頁
第2頁 / 共28頁
socket文件傳輸源代碼要點_第3頁
第3頁 / 共28頁

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

10 積分

下載資源

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

資源描述:

《socket文件傳輸源代碼要點》由會員分享,可在線閱讀,更多相關(guān)《socket文件傳輸源代碼要點(28頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、摘要 線程(thread )技術(shù)早在60年代就被提出,但真正應(yīng)用線程到操作系統(tǒng)中去, 是在80年代中期。為什么有了進程的概念后,還要再引入線程呢?使用多線程 到底有哪些好處? 使用多線程的理由之一是和進程相比,它是一種非常"節(jié)儉”的多任務(wù)操作方 式。在Linux系統(tǒng)下,啟動一個新的進程必須分配獨立的地址空間, 建立眾多的 數(shù)據(jù)表來維護它的代碼段、堆棧段和數(shù)據(jù)段。而運行于一個進程中的多個線程, 它們之間使用相同的地址空間,共享大部分數(shù)據(jù),啟動一個線程所花費的空間遠 遠小于進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小于進程問 所需要的時間。 使用多線程的理由之二是線程間方便的通信

2、機制。對不同進程來說,它們具 有獨立的數(shù)據(jù)空間,要進行數(shù)據(jù)的傳遞只能通過通信的方式進行,這種方式費時 且很不方便。由于同一進程下的線程之間共享數(shù)據(jù)空間, 所以一個線程的數(shù)據(jù)可 以直接為其它線程所用,這樣快且方便。 在計算機中,凡是提供服務(wù)的一方我們稱為服務(wù)端( Server ),而接 受服務(wù)的另一方我們稱作客戶端( Client ) o不過客戶端及伺服端的關(guān)系 不見得一定建立在兩臺分開的機器上,提供服務(wù)的伺服端及接受服務(wù)的客 戶端也有可能都在同一臺機器上,這樣在同一臺機器上就同時扮演伺服端 及客戶端。 線程間方便的通信機制可以使得在我們在服務(wù)端和客戶端方便的進行通信 傳輸與各種操作,可以

3、通過運用多線程機制方便實現(xiàn)上傳、下載文件;增加、刪 除用戶;以及在服務(wù)端進行文件的管理。 關(guān)鍵字:多線程、socket通信、服務(wù)器和客戶端 , 1需求分析 這次課程設(shè)計的要求是在以Linux為內(nèi)核的操作系統(tǒng)下,實現(xiàn)多線程文件傳 輸系統(tǒng)功能模塊。系統(tǒng)模塊分為服務(wù)器和客戶端兩部分, 客戶端實現(xiàn)對文件的上 傳、下載和查看服務(wù)器默認路徑下的文件列表;服務(wù)器可以對文件進行管理操作, 包括創(chuàng)建、刪除和重命名等。 多線程文件傳輸是一種一對多或者多對多的關(guān)系,一般是一個服務(wù)器對應(yīng)著 多個客戶端??蛻舳送ㄟ^socket連接服務(wù)器,服務(wù)器要為客戶端創(chuàng)建一個單獨 進程(線程)監(jiān)聽每個客戶端的請求。 創(chuàng)建

4、好連接之后文件就可以通過流的形式傳輸。linux內(nèi)核中為我們提供了 兩種不同形式的讀寫流,包括read()、write()和send()、recv()??蛻魴C對文 件的查看指令也是通過流傳遞給服務(wù)器,服務(wù)器根據(jù)請求類型返回不同相應(yīng)流。 根據(jù)socket原理和特點繪畫出鏈接流程圖,將客戶機與服務(wù)器的相互通信 劃分為不同的模塊,每個模塊負責獨立的功能項。服務(wù)器輸入指令管理目錄下的 文件,create filename 是創(chuàng)建文件命令, rename oldname newname1重命名文 命令,delete filename是刪除文件命令,同時監(jiān)聽著客戶端的請求;客戶端向 服務(wù)器發(fā)送上傳、下載

5、和查看請求,從而得到不同的相應(yīng),包括將文件下載到當 前路徑下,從當前路徑下上傳文件給服務(wù)器,列出服務(wù)器的文件列表。 ? 2 socket 通信原理 國際標準化組織(ISO)在1978年提出開放系統(tǒng)互連參考模型 (OSI:open system interconnection reference mode),該模型是設(shè)計和描述網(wǎng)絡(luò)通信的基 本框架。OSI采用分層的額結(jié)構(gòu)化技術(shù)將通信網(wǎng)絡(luò)分為 7層,從低到高為物理層、 數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層。 TCP/IP參考模型是由美國國防部創(chuàng)建,且發(fā)展至今最成功的通信協(xié)議模型, 與OSI模型對應(yīng),它將網(wǎng)絡(luò)功能分為4層,包括

6、網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層和 應(yīng)用層,每一層都有對應(yīng)的協(xié)議。在傳輸層的主要協(xié)議是 TCP協(xié)議和UDPft、議。 socket連接就是基于TCPB議。TCP是一種可靠地數(shù)據(jù)傳輸協(xié)議。 socket是一種套接口,它把網(wǎng)絡(luò)地址和端口號信息放在一個結(jié)構(gòu)體中, 也就 是套接字地址結(jié)構(gòu)。 結(jié)構(gòu)圖如下: Ip地址 端口號 168.222.222.222 9999 U 7 套接口 222.222.222.222 9999 套接口與ip、端口號的關(guān)系 通用套接口地址數(shù)據(jù)結(jié)構(gòu)定義在<sys/socket.h>頭文件中,形式如下: struct sockaddr { uint8

7、_t sa_len; sa_family_t sa_family; char sa_data[14]; }; 一 IPv4套接口地址數(shù)據(jù)結(jié)構(gòu)以 socketaddr_in 命名,定義在<netinet/in.h> 頭文件中,形式如下: 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 套接口通信工作流程圖 客戶機進程

8、 服務(wù)器進程 TCP套接口通信工作過程 通信工作的大致流程: 1)服務(wù)器先用socket()函數(shù)來建立一個套接口,用這個套接口完成通信的 監(jiān)聽及數(shù)據(jù)的收發(fā)。 2)服務(wù)器用bind()函數(shù)來綁定一個端口號和ip地址,是套接口與指定的 端口號和ip關(guān)聯(lián)。 3)服務(wù)器調(diào)用linsten()函數(shù),是服務(wù)器的端口和Ip處于監(jiān)聽狀態(tài),等待 網(wǎng)絡(luò)中某一個客戶機的連接請求。 4)客戶機用socket()函數(shù)建立一個套接口,設(shè)定遠程ip和端口 5)客戶機調(diào)用connect。函數(shù)連接遠程計算機指定的端口。 6)服務(wù)器調(diào)用accept()函數(shù)來接受遠程計算機的連接請求,建立起與客戶 機之間的

9、通信連接。 7)建立連接之后,客戶機用write()函數(shù)(或send())向socket中寫入數(shù) 據(jù)。也可以用read()函數(shù)(或recv()函數(shù))讀出服務(wù)器發(fā)送來的數(shù)據(jù)。 8)服務(wù)器用read()函數(shù)(或recv()函數(shù))來讀取客戶機發(fā)來的數(shù)據(jù),也可 以用write()函數(shù)(或send()函數(shù))來發(fā)送數(shù)據(jù)。 9)完成通信以后,使用close()函數(shù)關(guān)閉socket連接。 ? 3詳細設(shè)計過程 ? 3.1服務(wù)器端創(chuàng)建監(jiān)聽與文件管理 服務(wù)器負責的功能模塊主要有兩部分, 一是對連接進來客戶端所有線程的管 理和服務(wù)器目錄下的文件管理;二是創(chuàng)建線程來單獨監(jiān)聽客戶端的動作。 為了使 于管理

10、,我們創(chuàng)建兩個user.txt和client.txt 兩個文檔來分別負責服務(wù)器的連 接和客戶端的連接。user.txt中存放了服務(wù)器名和密碼。client.txt 存放了連 接客戶端名字和密碼。 我們首先對服務(wù)器的創(chuàng)建有個監(jiān)測,即在啟動時先核實服務(wù)器的所有者 username和密碼password,將輸入的用戶、密碼與user.txt 中的用戶密碼比較, 匹配成功則同意啟動,否則return -1 表失敗。 接著創(chuàng)建一個socket套接口,綁定Ip設(shè)置客戶端的最大連接數(shù)為10,然后 創(chuàng)建一個sever線程來實現(xiàn)對服務(wù)器本身監(jiān)聽動作。主體代碼見最后 接下來創(chuàng)建線程完成對客戶端的監(jiān)聽

11、 監(jiān)聽等待連接: 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_client[10]; 來存放每個客戶端的socket信息、線程標識、使用號、連接號和客戶名。 創(chuàng)建線程實現(xiàn)單獨監(jiān)聽: p_client[i].conn_fd = sockdata; p_client[i].used = i; strcpy(p_clie

12、nt[i].name , client_name); pthread_create(&p_client[i].tid,NULL,&client_conn,&p_client[i]) 接下來是線程client_conn()的功能 監(jiān)聽客戶端的功能完屏 ? 3.2客戶端連接與文件傳輸 在客戶端這邊我們同樣適用了檢測機制,運行客戶機時要將用戶名、密碼以 及ip地址和端口號作為參數(shù)輸進來,先建立與服務(wù)器的連接,然后將用戶名和 密碼發(fā)送到服務(wù)端檢測,如果檢測失敗則接收到一條拒絕信息, 連接斷開,如果 檢測成功則接收到一條確認信息,雙方通信開始。 主體代碼見最后: 到此為止我們已經(jīng)實現(xiàn)了

13、服務(wù)器和客戶端的主體功能, 具體代碼查看附錄文 件夾。 , 4結(jié)果演示 編譯完成的serve和client Icon Vi ew Plates * X 謫wl K Desktop _ File System -j Network _ Floppy Dr,.. 1 Tfdih ,文檔 ,音樂 日褸罰 L下Q download fuel 4s rec i eve send *i.ncl ^LrtCl 桌面 出腿 Wif client client c server serverx temp.txt 創(chuàng)建文檔a down

14、load red eve ② client — *it-cL $erv^r 更面 fan cl find 力口「1 servers atxt rerif fKlf rent wiv client c wl@>ut>untu:- file Edit yiew Search Terminal help Please input your choice bellow; 工:Create a new file. 2: Delete a file. 3: Rename a known filer I Please input The file has t

15、he new file name:a.txt created successfully. 將文檔a改名為 download 令 client recieve 臬面 ?r 口仁 i *incl *tncl ■find b.txt FC L reci? rie 『皿七 機M *incl ifincl cbent.c server server.c temp.txt wt^pubuntu:一 Fite Edit View Search Terminal Help Please input a .tzt Please input b.txt File a.txt

16、 ttie file name you warn to rename: the new file name: renamed to b.txt 將 文 recievel send i/iew Bookmarks Help send ■ 口 wl^ubuntu:- [file Edit yiew search lerminal Hdp b.txt please input the path you want to upload end with y : send/ b. txt The file The file lengsize The file PU

17、ase input the file you want to upload; open successfully! is uploading newr.. ii 2 txt 3.txt a. txt has been uploaded already. 謂l@buntu:7 口 b.txt Co Bookmarks Help wl 典 buntu:一 ii 2.txt 3Xxt b.txt a.txt 將文檔 a上傳由send上傳至U recieve2 File Edit View Search Terminal Help please

18、 input the path you want to upload end with /: send/ Please input the file you want t。 upload: b. txt The file open successfully! Iitie file is uploading now.. r lengsize = 5 The file has been uploaded already. wl@ubuntu:7 " 「 - 并 連 接 服 務(wù) 器 wl^ubuntu: * pn wl@ubuntu:一 File Edit

19、 view search TemninaL Help wl@ubumu:F . /server Please choose your choice bellow: l:Marage rhe files. 2:connect the clients. File Edit View Search leminal Help Run the server suecessful.ly. And now waiting the client tomfning... 奶 Its username and right, 1123 Its password and right. The cli

20、ent wants to (iovmlcad file. Send the filelist to the eliert... Please input your username:yy 你已拄發(fā)送username(0yy)^ sErver請等待師應(yīng)--- 柝己拄當?shù)搅?server的碇或:ye$ Please input your password; 123 1 你 SEj^ password (1123) iS serveri# ... 你巳提得到Tsezer的響應(yīng):yes Please choose eithor upload file or download file be

21、llow: l:uplaad file. 2:download file. recieve/ file:recieve/2.txt The fiteListstring Lengsize = 56 recieve/2.tKt recieve/l,tKt recievt:/3.tKt necieve/a.txt file:recieve/lLtxt open successfully! The filelist supported by server is bellows fiL recieve/2,txt recieve/l.txt recieve/a.txt reciev

22、e/a.txt Please input the file you want to download : Hie fileLLstStrlng clii 陶5 been sent to The download recieve send server clientc serverx FfClf re-ri€ reci* FMlf fip-cl ?iheI *incl 科幾cl #incl *mci *inl 下 載 文

23、 Co Bookmarks Hetp , w wi recieve Please input the file you want to download : 3.txt go goakrnarks Help O wl(pubuntu: [He Edit View Search lerminal Help File Edit View Search Terminal Help l:upload file. 2idawnload file. The filelist supported by server is bellow: recie

24、ve/2,txt recieve/1.txt recieve/3.1xt recieve/a.txt The client thoosen file: 3,txt The file open successfully The file is downloading to the client now The file has been downloaded already. wl@ubunttJ:4$ 口 ,- l.txt 3.txt 文 檔 后 l.txt 具體代碼如下: 服務(wù)器: #include #include

25、 #include #include #include #include #include #include #include #include #define MAXBUF 256 /* start of fil

26、eList functions */ int fileSize(char fileName[]); //文件信息 typedef struct fileinfo{ char name[256]; char fullName[1024]; int size; time_t mod_time; char type[10]; }fileinfo; //文件列表 typedef struct filelist { fileinfo file; struct filelist* nextfile; 押eList; //function getfilelist //輸入目

27、錄名 //輸出目錄下的文件列表頭指針 fileList * getFileList(char name[1024]) { fileList *head=NULL; fileList *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; //

28、 打開目錄 dir=opendir(name); 讀文件描述表 II while(dir_env=readdir(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);// 獲取文件描述信息 // 將2件信息存版到鏈表中 // 產(chǎn)生

29、臨時節(jié)點 cur=(fileList*)malloc(sizeof(fileList)); //cur 賦值 // 文件名,fullName=cur_dir+"name"; strcpy(cur->file.name,dir_env->d_name); strcpy(cur->file.fullName,name_temp); // 文件大小 // 文件類型 if( S_ISDIR(stat_file.st_mode)) cur->file.size = 0; strcpy(cur->file.type,"mulu"); strcat(cur->file.fullName

30、,"/"); }else { cur->file.size = stat_file.st_size; strcpy(cur->file.type,"file"); } // 修改日期 cur->file.mod_time = ctime(&stat_file.st_mtime); // 將臨時節(jié)點插入head中 if(head->nextfile ==NULL) { head->nextfile = cur; cur->nextfile = NULL; }else { cur->nextfile = head->nextfile; head->nextfile =

31、cur; return head; } //showAllNode //輸入:目錄 //輸出:次目錄下所有的文件,和所有目錄之下的文件 void showAllNode(fileList *head) { fileList * temp; // 數(shù)組索引 int i=0,j=0; // 如果head為空,直接返回 fileList * headArray[1024]; if(head == NULL) return ; // 輸出當前目錄 printf("%s ",head->file.fullName); printf("\n"); // 輸出head中的

32、文件 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⑴; } while(temp) { // 判斷是否為文件,是文件顯示文件 // 若為目錄,將目錄名放入隊列,求隊列目錄 if (strcmp(temp->file.type,"file")

33、==0) { bzero(fileListString,MAXBUF); printf("file:%s ",temp->file.fullName); strcat(fileListString,temp->file.fullName); strcat(fileListString,"\n"); while ((strlen(fileListString)) > 0) { int write_length = fwrite(fileListString, sizeof(char), strlen(fileListString), file); if (write_leng

34、th < strlen(fileListString)) {. printf("File Write into Failedn"); break; } bzero(fileListString, MAXBUF); } }else{ if(i>=1024) { printf("there are too many direcotry\n"); return; } // 頭節(jié)點初始化 headArray[i] = getFileList(temp->file.fullName); // 頭節(jié)點名稱 strcpy(headArray[i]->file.fullName,

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

36、d) { printf("%s\n",head->file.fullName); head = head->nextfile; } return ; } /* end of fileList functions */ void main() { int opt=1; while(opt!=0){ printf("Please choose your choice bellow:\n"); printf("1:Manage the files.\n"); printf("2:Connect the clients.\n"); char window[2]; sca

37、nf("%s",window); if((strncmp(window,"1",1))==0){ printf("Please input your choice bellow:\n"); printf("1: Create a new file.\n"); printf("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

38、new file name:"); char filename[20]; scanf("%s",filename); FILE *file; file=fopen(filename,"w"); if(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 fil

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

40、 the new file 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 clen; struct sockaddr_in client_addr,server_ad

41、dr; char buf[MAXBUF]; if((ssock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))<0){ perror("socket error:"); exit⑴; } printf("Run the server successfully.\nAnd now waiting the client comming…\n"); memset(&server_addr,0,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_addr.s_addr=i

42、net_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:"); exit⑴; } int window=1; while(window!=0){ clen=sizeof(client_addr); recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr,&clen);

43、 printf("%s\n",buf); if((strncmp(buf, "0", 1)) == 0) { if((strncmp(buf, "0yy", 7)) == 0) { 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(c

44、lient_addr)); } 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"); recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)

45、&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 the file uploaded by user is:%s\n",buf); FILE *file; char temp[30]; strcp

46、y(temp,"recieve/"); strcat(temp,buf); file=fopen(temp,"w"); if(file==NULL){ printf("The file is created failed!"); exit⑴; } bzero(buf, MAXBUF); recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr,&clen); while (strlen(buf) > 0) { int write_length = fwrite(buf, sizeof(char), s

47、trlen(buf), file); if (write_length < strlen(buf)) {. printf("File Write into Failedn"); 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"); //filelis

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

49、en(temp,"r"); if(file==NULL){ printf("The file cannot open!"); exit⑴; } else{ printf("\nThe fileListString open successfully!\n"); bzero(buf,MAXBUF); int lengsize = 0; while((lengsize = fread(buf,1,MAXBUF,file)) > 0) { printf("lengsize = %d\n",lengsize); sendto(ssock,(void *)buf,MAX

50、BUF,0,(struct sockaddr*)&client_addr,sizeof(server_addr)); printf("%s\n",buf); bzero(buf, MAXBUF); } 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 c

51、lient choosen file: %s\n",buf); strcpy(temp,"recieve/"); strcat(temp,buf); file=fopen(temp,"r"); if(file==NULL){ printf("The file is created failed!"); exit⑴; } else{ printf("The file open successfully!\n"); printf("The file is downloading to the client now…\n"); bzero(buf,MAXBUF); int len

52、gsize = 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); } printf("The file has been downloaded already.\n"); } fclose(file); exit(1);// 還可以顯示此

53、時的文件目錄信息,檢查是否 完成了上傳 } close(ssock); window=0; } else { strcpy(buf,"no"); sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr ,sizeof(client_addr)); printf("Its password but wrong.\n"); } } } } } } 客服端: #include #include #include #include

54、s.h> #include #include #include #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

55、[21]; char window; printf("Please input 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 yo

56、ur username:"); scanf("%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:你暫時不能登錄服務(wù)器server ,請稍后 再登錄…\n"); exit⑴; } else{ while(key==0){ memset(&serv

57、er_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,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,sizeof(server_add

58、r)); printf(" 你已經(jīng)發(fā)送 username(%s)給server 請等待響 應(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((strncmp(buf, "yes", 3)) != 0) { printf("The username you inputed is wrong!\n"); window=1; c

59、lose(ssock); printf("Please input your username:"); scanf("%s",username); printf("%s\n",username); } else{ close(ssock); key=1; } } } printf("Please input your password:"); scanf("%s",password); printf("%s\n",password); if((ssock = socket(AF_INET,SOCK_DGRAM,0))<0){ perror("socket erro

60、r:你暫時不能登錄服務(wù)器server ,請稍后 再登錄…\n"); exit⑴; } else{ key=0; while(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); bzero(temp,21); strcpy(temp,"1"); printf("%s\n",temp);

61、 strcat(temp,password); strcpy(buf,temp); sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,sizeof(server_addr)); printf(" 你已經(jīng)發(fā)送 password(%s)給server 請等待響 應(yīng)…\n",buf); clen=sizeof(client_addr); recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,&clen); printf("你

62、已經(jīng)得到了 server 的響應(yīng):%s\n",buf); 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 and file choose printf("Please choose

63、 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){ printf("please input the path you want to upload end with /:\n"); scanf("%s",path

64、); 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)); scanf("%s",filename); strcat(path,filename); strcpy(buf,filename); sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_add

65、r,sizeof(server_addr)); FILE *file; file=fopen(path,"r"); if(file==NULL){ perror("The file open failed!"); exit⑴; } 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) { pri

66、ntf("lengsize = %d\n",lengsize); 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);// 還可以顯示此時的文件目錄信息,檢 查是否完成了上傳 } *)buf,MAXBUF,0,(struct supported by server is *)buf,MAXBUF,0,(struct the file you want to *)buf,MAXBUF,0,(struct } else{ bzero(buf,MAXBUF); strcpy(buf,"download"); sendto(ssock,(void sockaddr*)&server_addr,sizeof(server_add

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

相關(guān)資源

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

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

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


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