Linux-網(wǎng)絡(luò)編程課程設(shè)計_第1頁
Linux-網(wǎng)絡(luò)編程課程設(shè)計_第2頁
Linux-網(wǎng)絡(luò)編程課程設(shè)計_第3頁
Linux-網(wǎng)絡(luò)編程課程設(shè)計_第4頁
Linux-網(wǎng)絡(luò)編程課程設(shè)計_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2014-2015學(xué)年第二學(xué)期LINUX網(wǎng)絡(luò)編程考查作業(yè)設(shè)計題目:《Linux網(wǎng)絡(luò)編程課程設(shè)計》指導(dǎo)老師:李相海專業(yè):網(wǎng)絡(luò)工程(網(wǎng)絡(luò)安全與攻防)班級:13級網(wǎng)安四班姓名:朱曉杰學(xué)號:1315925022Linux網(wǎng)絡(luò)編程課程設(shè)計一丶實驗?zāi)康模和ㄟ^本教學(xué)環(huán)節(jié),讓學(xué)生在Linux環(huán)境下,利用socket編程常用函數(shù)及socket編程的一般規(guī)則和客戶/服務(wù)器模型,編寫網(wǎng)絡(luò)應(yīng)用程序,能夠應(yīng)用網(wǎng)絡(luò)間通信,進(jìn)一步熟悉和鞏固Linux環(huán)境下網(wǎng)絡(luò)程序設(shè)計的相關(guān)技術(shù)和方法,培養(yǎng)網(wǎng)絡(luò)編程思維方式。1.掌握面向連接的套接字連接的綜合操作。2.實現(xiàn)不同計算機(jī)之間的文本、文件等類型數(shù)據(jù)的傳送。二丶實驗內(nèi)容:編寫一個以客戶機(jī)/服務(wù)器模式工作的程序,實現(xiàn)TCP文件傳輸功能。服務(wù)器端等待客戶端的請求,客戶端向服務(wù)器端發(fā)送請求上傳文件,待服務(wù)器響應(yīng)后,將文件內(nèi)容通過TCP方式傳送給服務(wù)器端。要求:在客戶端建立一個文件test,并在里面寫入本程序的服務(wù)器端代碼;在客戶機(jī)端讀取文件test內(nèi)容,傳送到服務(wù)器;服務(wù)器端將文件保存在/tmp目錄下。三丶實驗步驟:服務(wù)器端(1)創(chuàng)建套接字(socket)(2)將套接字綁定到一個本地地址和端口上(bind)(3)將套接字設(shè)為監(jiān)聽模式,準(zhǔn)備接收客戶端請求(listen)(4)等待客戶請求到來;當(dāng)請求到來后,接受連接請求,返回一個新的對應(yīng)于此次連接的套接字(accept)(5)用返回的套接字和客戶端進(jìn)行通信(send/recv)(6)返回,等待另一個客戶請求。(7)關(guān)閉套接字。客戶端(1)創(chuàng)建套接字(socket)(2)向服務(wù)器發(fā)出連接請求(connect)(3)和服務(wù)器端進(jìn)行通信(send/recv)(4)關(guān)閉套接字四丶主要算法和程序清單程序編碼:#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<strings.h>#include<fcntl.h>#include<string.h>#definePORT5678//宏定義端口號intmain(){intsockfd,newsockfd,fd;structsockaddr_inaddr;intaddr_len=sizeof(structsockaddr_in);charmsgbuffer[256];chartmp_file[128],file[128];ssize_tbytes;if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){perror("createsocket");return0;}bzero(&addr,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(PORT);addr.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sockfd,(structsockaddr*)&addr,sizeof(addr))<0){perror("bindsocket");return0;}if(listen(sockfd,3)<0){perror("listen");return0;}if((newsockfd=accept(sockfd,(structsockaddr*)&addr,&addr_len))<0){perror("accept");close(sockfd);return0;}while(1){bytes=read(newsockfd,msgbuffer,sizeof(msgbuffer));if(bytes<=0)break;if(!strncmp(msgbuffer,"exit",4))break;elseif(!strncmp(msgbuffer,"filename",8)){sscanf(msgbuffer,"filename:%s",tmp_file);printf("客戶端發(fā)送過來的文件%s\n",tmp_file);sprintf(file,"/tmp/%s",tmp_file);fd=open(file,O_CREAT|O_WRONLY);if(fd>0){printf("打開文件%s成功!\n",file);strcpy(msgbuffer,"accepted");write(newsockfd,msgbuffer,sizeof(msgbuffer));}}elsewrite(fd,msgbuffer,bytes);}printf("%s輸出成功!\n",file);if(fd>0)close(fd);close(newsockfd);close(sockfd);return0;}客戶端:#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<fcntl.h>#definePORT5678intmain(intargc,char*argv[]){intsockfd,fd;structsockaddr_inaddr;intaddr_len=sizeof(structsockaddr_in);charmsgbuffer[256];ssize_tbytes;if(argc<2){printf("請輸入文件名!\n");return0;}if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){perror("createsocket");return0;}bzero(&addr,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(PORT);addr.sin_addr.s_addr=htonl(INADDR_ANY);if(connect(sockfd,(structsockaddr*)&addr,addr_len)!=0){perror("connectfail");close(sockfd);return0;}sprintf(msgbuffer,"文件名:%s",argv[1]);write(sockfd,msgbuffer,strlen(msgbuffer));read(sockfd,msgbuffer,sizeof(msgbuffer));if(!strncmp(msgbuffer,"accepted",8)){fd=open(argv[1],O_RDONLY);printf("文件%s打開!\n",argv[1]);if(fd>0){while((bytes=read(fd,msgbuffer,sizeof(msgbuffer))>0)){write(sockfd,msgbuffer,bytes);}close(fd);printf("成功傳輸?shù)椒?wù)器端!\n");}}strcpy(msgbuffer,"exit");write(sockfd,msgbuffer,strlen(msgbuffer));close(sockfd);//關(guān)閉套接字return0;}#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<strings.h>#include<fcntl.h>#include<string.h>#definePORT5678//宏定義端口號intmain(){intsockfd,newsockfd,fd;structsockaddr_inaddr;intaddr_len=sizeof(structsockaddr_in);charmsgbuffer[256];chartmp_file[128],file[128];ssize_tbytes;if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){perror("createsocket");return0;}bzero(&addr,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(PORT);addr.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sockfd,(structsockaddr*)&addr,sizeof(addr))<0){perror("bindsocket");return0;}if(listen(sockfd,3)<0){perror("listen");return0;}if((newsockfd=accept(sockfd,(structsockaddr*)&addr,&addr_len))<0){perror("accept");close(sockfd);return0;}while(1){bytes=read(newsockfd,msgbuffer,sizeof(msgbuffer));if(bytes<=0)break;if(!strncmp(msgbuffer,"exit",4))break;elseif(!strncmp(msgbuffer,"filename",8)){sscanf(msgbuffer,"filename:%s",tmp_file);printf("客戶端發(fā)送過來的文件%s\n",tmp_file);sprintf(file,"/tmp/%s",tmp_file);fd=open(file,O_CREAT|O_WRONLY);if(fd>0){printf("打開文件%s成功!\n",file);strcpy(msgbuffer,"accepted");write(newsockfd,msgbuffer,sizeof(msgbuffer));}}elsewrite(fd,msgbuffer,bytes);}printf("%s輸出成功!\n",file);if(fd>0)close(fd);close(newsockfd);close(sockfd);return0;}五丶實驗結(jié)果:客戶端[root@bogon~]#vim

溫馨提示

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

評論

0/150

提交評論