文件傳輸協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告</p><p>  題目:文件傳輸協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b>  目錄</b></p><p>  1.課程設(shè)計(jì)目的和要求</p><p><b>  2.背景知識(shí)</b></p><p><b>  3.

2、課程設(shè)計(jì)分析</b></p><p><b>  4.程序清單</b></p><p><b>  5.運(yùn)行結(jié)果</b></p><p><b>  6.總結(jié)</b></p><p><b>  課程設(shè)計(jì)目的和要求</b></p>

3、<p>  文件傳輸是各種計(jì)算機(jī)的網(wǎng)絡(luò)的基本功能,文件傳送協(xié)議是一種最基本的應(yīng)用層協(xié)議。它是按照客戶或服務(wù)器模式進(jìn)行的工作,提供交式的訪問。是INTERNRT使用最廣泛的協(xié)議之一。以及深入了解計(jì)算機(jī)網(wǎng)絡(luò)是建立在TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)上。</p><p>  用 socket 編程接口編寫倆個(gè)程序,分別為客戶程序和服務(wù)器程序</p><p>  掌握TCP/IP 網(wǎng)絡(luò)應(yīng)用程序基

4、本的設(shè)計(jì)方法;</p><p>  用socket 編程接口編寫兩個(gè)程序,分別為客戶程序(client.c)和服務(wù)器程序(server.c);</p><p>  撰寫課程設(shè)計(jì)說明書。裝訂后的課程設(shè)計(jì)說明書不少于10面(含封面、任務(wù)書、目錄、正文、參考文獻(xiàn)、成績(jī)?cè)u(píng)定表、封底)。</p><p><b>  背景知識(shí)</b></p>

5、<p>  第一個(gè)FTP的RFC由A.K.Bhushan 在1971年提出,同時(shí)由MIT與Harvard實(shí)驗(yàn)實(shí)現(xiàn),RFC 172提供了主機(jī)間文件傳輸?shù)囊粋€(gè)用戶級(jí)協(xié)議。長期發(fā)展過程由于底層協(xié)議從NCP改變?yōu)門CP,RFC765定義了采用TCP的FCP.</p><p>  FTP協(xié)議在今天已經(jīng)發(fā)展成熟,應(yīng)用也越來越廣很多開發(fā)的比較成熟的FTP客戶端軟件已經(jīng)得到了廣泛的應(yīng)用.</p><

6、;p><b>  課程設(shè)計(jì)分析</b></p><p>  Server端 Client端</p><p>  創(chuàng)建ServerSocket對(duì)象,在某端口提供監(jiān)聽服務(wù)Client端 </p><p>  等待來自Client端的服務(wù)請(qǐng)求 </p&

7、gt;<p>  接受Client端的請(qǐng)求,用返回的 創(chuàng)建Socket對(duì)象,向Server </p><p>  Socket建立連接 的監(jiān)聽端口請(qǐng)求 </p><p>  通過向Socket中讀寫數(shù)據(jù)來

8、通過向新的Socket中讀寫數(shù)</p><p>  與Client端通信 據(jù)來與Server端通信</p><p>  關(guān)閉Socket,結(jié)束與Server端的通信 關(guān)閉Socket,結(jié)束與當(dāng)前</p><p>  Client的通信,等待其他請(qǐng)求</p>

9、<p>  關(guān)閉ServerSocket對(duì)象,結(jié)束監(jiān)聽服務(wù)</p><p><b>  4.程序清單:</b></p><p><b>  服務(wù)器源代碼:</b></p><p>  #include <Winsock2.h></p><p>  #include <s

10、tdio.h></p><p>  #include <iostream></p><p>  using namespace std;</p><p>  #pragma comment(lib, "wsock32.lib")</p><p>  #define PORT 4523</p>

11、;<p>  char buf_send[1024];</p><p>  char buf_rec[1024];</p><p>  SOCKET sockSrv;</p><p>  //socket初始化</p><p>  DWORD CreateSocket()</p><p><b>

12、;  {</b></p><p>  WSADATA WSAData;//WSADATA結(jié)構(gòu)被用來保存函數(shù)WSAStartup返回的Windows Sockets初始化信息</p><p>  if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)//WSAStartup完成winsock的初始化</p><p>  

13、{printf("socket initialize failed!\n");</p><p>  return (-1);</p><p><b>  }</b></p><p>  sockSrv=socket(AF_INET,SOCK_STREAM,0);//定義為面向連接的,返回值送給sockSrv</p>

14、;<p>  if(sockSrv==SOCKET_ERROR)</p><p><b>  {</b></p><p>  printf("socket create failed ! \n");</p><p>  WSACleanup();//中止Windows Sockets DLL的使用</p&

15、gt;<p>  return(-1);</p><p><b>  }</b></p><p>  SOCKADDR_IN addrSrv;//TCP/IP使用SOCKADDR_IN 定義地址</p><p>  addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//計(jì)算機(jī)IP地址&l

16、t;/p><p>  addrSrv.sin_port=htons(PORT);//協(xié)議端口號(hào)</p><p>  addrSrv.sin_family=AF_INET;//地址所屬協(xié)議簇</p><p><b>  //綁定端口</b></p><p>  if(bind(sockSrv,(struct sockaddr

17、FAR *)&addrSrv,sizeof(addrSrv))==SOCKET_ERROR)</p><p><b>  {</b></p><p>  printf("Bind Error");</p><p>  return(-1);</p><p><b>  }</b

18、></p><p>  return (1);</p><p><b>  }</b></p><p>  int SendFileRecord(SOCKET datatcps,WIN32_FIND_DATA *pfd)//用于回復(fù)給客戶端</p><p><b>  {</b></p&

19、gt;<p>  char filerecord[MAX_PATH+32];</p><p>  FILETIME ft;</p><p>  FileTimeToLocalFileTime(&pfd->ftLastWriteTime,&ft);//將一個(gè)FILETIME結(jié)構(gòu)轉(zhuǎn)換成本地時(shí)間 </p><p>  SYSTEMTIM

20、E lastwtime;//系統(tǒng)時(shí)間</p><p>  FileTimeToSystemTime(&ft,&lastwtime);//根據(jù)一個(gè)FILETIME結(jié)構(gòu)的內(nèi)容,裝載一個(gè)SYSTEMTIME結(jié)構(gòu) </p><p>  char *dir=pfd->dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY?"<

21、DIR>":" ";</p><p>  sprintf(filerecord,"%04d-%02d-%02d %02d:%02d %5s %10d %-20s\n", </p><p>  lastwtime.wYear,</p><p>  lastwtime.wMonth,</p>&

22、lt;p>  lastwtime.wDay,</p><p>  lastwtime.wHour,</p><p>  lastwtime.wMinute,</p><p><b>  dir,</b></p><p>  pfd->nFileSizeLow,</p><p>  pf

23、d->cFileName);</p><p>  if(send(datatcps,filerecord,strlen(filerecord),0)==SOCKET_ERROR)//發(fā)送回復(fù)失敗</p><p><b>  {</b></p><p>  printf("Error occurs when sending fil

24、e list!\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  return 1;</b></p><p><b>  }</b></p><

25、;p>  //發(fā)送主機(jī)文件目錄</p><p>  int SendFileList(SOCKET datatcps)</p><p><b>  {</b></p><p>  HANDLE hff;</p><p>  WIN32_FIND_DATA fd; //獲取和更改文件屬性</p><

26、;p>  hff=FindFirstFile("*",&fd);//搜索文件</p><p>  if(hff==INVALID_HANDLE_VALUE)//搜索無效返回值</p><p><b>  {</b></p><p>  const char *errstr="can't lis

27、t files!\n";</p><p>  cout<<"list file error!"<<endl;</p><p>  if(send(datatcps,errstr,strlen(errstr),0)==SOCKET_ERROR)</p><p><b>  {</b></

28、p><p>  cout<<"error occurs when sending file list!"<<endl;</p><p><b>  }</b></p><p>  closesocket(datatcps);</p><p><b>  return 0;

29、</b></p><p><b>  }</b></p><p>  BOOL fMoreFiles=TRUE;//BOOL型,返回值為大于0的整數(shù)時(shí)為TRUE,返回值為0時(shí)候,為FALSE,返回值為-1時(shí)為ERROR。</p><p>  while(fMoreFiles)</p><p><b>

30、;  {</b></p><p>  //發(fā)送此項(xiàng)文件信息</p><p>  if(!SendFileRecord(datatcps,&fd))//發(fā)送失敗</p><p><b>  {</b></p><p>  closesocket(datatcps);</p><p&g

31、t;<b>  return 0;</b></p><p><b>  }</b></p><p><b>  //搜索下一個(gè)文件</b></p><p>  fMoreFiles=FindNextFile(hff,&fd);</p><p><b>  }&

32、lt;/b></p><p>  closesocket(datatcps);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  //發(fā)送數(shù)據(jù)</b></p><p>  i

33、nt SendFile(SOCKET datatcps,FILE* file)//發(fā)送文件</p><p><b>  {</b></p><p>  printf("sending file data..");</p><p><b>  for(;;)</b></p><p>

34、;  //從文件中循環(huán)讀取數(shù)據(jù)并發(fā)送客戶端</p><p><b>  {</b></p><p>  int r=fread(buf_send,1,1024,file);</p><p>  if(send(datatcps,buf_send,r,0)==SOCKET_ERROR)</p><p><b> 

35、 {</b></p><p>  printf("lost the connection to client!\n");</p><p>  closesocket(datatcps);</p><p><b>  return 0;</b></p><p><b>  }<

36、;/b></p><p>  if(r<1024)//文件傳送結(jié)束</p><p><b>  break;</b></p><p><b>  }</b></p><p>  closesocket(datatcps);</p><p>  printf(&qu

37、ot;done\n");</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  DWORD ProcessCmd()</p><p><b>  {</b></p><p>  if

38、(listen(sockSrv,5)<0)//監(jiān)聽信號(hào)</p><p><b>  {</b></p><p>  cout<<"Listen error!"<<endl;</p><p>  return(-1);</p><p><b>  }</b&

39、gt;</p><p>  cout<<"Listening for the request……"<<endl;</p><p>  SOCKADDR_IN addrclient;//定義用于返回客戶機(jī)端地址的結(jié)構(gòu)</p><p>  int len=(sizeof(SOCKADDR_IN));</p>&l

40、t;p><b>  while(1)</b></p><p><b>  {</b></p><p>  SOCKET sockconn=accept(sockSrv,(SOCKADDR*)&addrclient,&len);//接受請(qǐng)求,產(chǎn)生新的套接字</p><p>  if(sockconn==

41、INVALID_SOCKET)</p><p><b>  continue;</b></p><p>  else cout<<"connecting from client"<<endl;</p><p>  while(true)</p><p><b>  {

42、</b></p><p>  char filename[20];</p><p>  memset(buf_rec,0,1024);</p><p>  memset(buf_send,0,1024);</p><p>  if(recv(sockconn,buf_rec,1024,0)<=0)</p>&l

43、t;p><b>  {</b></p><p><b>  break;</b></p><p><b>  } </b></p><p>  cout<<endl<<"the command is:"<<buf_rec<<e

44、ndl;</p><p>  if(strncmp(buf_rec,"dir",3)!=0&&strncmp(buf_rec,"get",3)!=0&&strncmp(buf_rec,"put",3)!=0)</p><p>  continue;//有一個(gè)請(qǐng)求正確執(zhí)行下面語句</p>

45、<p>  if(strncmp(buf_rec,"dir",3)==0)</p><p><b>  {</b></p><p>  strcpy(buf_send,"dir-ing\n");</p><p>  send(sockconn,buf_send,1024,0);</p&g

46、t;<p>  SendFileList(sockconn);//發(fā)送當(dāng)前所有文件名</p><p><b>  }//dir</b></p><p>  if (strncmp(buf_rec,"get",3)==0)</p><p><b>  { </b></p>

47、;<p>  strcpy(filename,buf_rec+4);</p><p>  cout<<filename;</p><p>  FILE *file; </p><p>  //處理下載文件請(qǐng)求</p><p>  file=fopen(filename,"rb");//打開下載的文

48、件</p><p><b>  if(file)</b></p><p><b>  { </b></p><p>  sprintf(buf_send,"get file %s\n",filename);</p><p>  if(!send(sockconn,buf_send

49、,1024,0))</p><p>  {fclose(file);</p><p>  return 0;}</p><p><b>  else</b></p><p>  {//創(chuàng)建額外數(shù)據(jù)連接傳送數(shù)據(jù)</p><p>  if(!SendFile(sockconn,file))</p

50、><p><b>  return 0;</b></p><p>  fclose(file);}</p><p><b>  }//file</b></p><p>  else//打開文件失敗</p><p><b>  {</b></p>

51、<p>  strcpy(buf_send,"can't open file!\n");</p><p>  if(send(sockconn,buf_send,1024,0))</p><p><b>  return 0;</b></p><p><b>  }</b><

52、/p><p>  }//get 處理客戶端的下載請(qǐng)求</p><p>  if(strncmp(buf_rec,"put",3)==0)</p><p><b>  {</b></p><p><b>  FILE *fd;</b></p><p>  in

53、t count;</p><p>  strcpy(filename,buf_rec+4); </p><p>  fd=fopen(filename,"wb");</p><p>  if(fd==NULL)</p><p><b>  {</b></p><p>  pri

54、ntf("open file %s for weite failed!\n",filename);</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  sprintf(buf_send,"put file %s",fil

55、ename);</p><p>  if(!send(sockconn,buf_send,1024,0))</p><p>  {fclose(fd);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  wh

56、ile((count=recv(sockconn,buf_rec,1024,0))>0)</p><p>  fwrite(buf_rec,sizeof(char),count,fd);</p><p>  fclose(fd);</p><p><b>  continue;</b></p><p>  }//p

57、ut 處理客戶端的上傳請(qǐng)求</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b>&l

58、t;/p><p>  CreateSocket();</p><p>  ProcessCmd();</p><p>  return(1);</p><p><b>  }</b></p><p>  2. 客戶端程序源代碼:</p><p>  #include <W

59、insock2.h></p><p>  #include <stdio.h></p><p>  #include <iostream></p><p>  using namespace std;//使用名稱空間std</p><p>  #pragma comment(lib, "wsock3

60、2.lib")//將WinLib.lib庫加入到工程中進(jìn)行編譯</p><p>  #define PORT 4523//定義端口號(hào)為4523</p><p>  char send_str[1024];</p><p>  char rec_str[1024];</p><p>  char IP[20];</p>

61、<p>  char filename[20];</p><p>  SOCKET sockClient;</p><p>  SOCKADDR_IN addrServer;//定義表示地址的結(jié)構(gòu)體addrServer,用來表示本地地址</p><p><b>  //創(chuàng)建套接字</b></p><p>  D

62、WORD CreateSock()</p><p><b>  {</b></p><p><b>  //本地信息</b></p><p>  addrServer.sin_family=AF_INET;//地址所屬協(xié)議簇</p><p>  //AF表示ADDRESS FAMILY 地址族<

63、;/p><p>  // htons的功能:將一個(gè)無符號(hào)短整型數(shù)值轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序</p><p>  addrServer.sin_port=htons(PORT);//協(xié)議端口號(hào)</p><p>  WSADATA WSAData;//WSADATA結(jié)構(gòu)被用來保存函數(shù)WSAStartup返回的Windows Sockets初始化信息</p><p

64、>  WORD wVersionRequsdted;</p><p><b>  int err;</b></p><p>  wVersionRequsdted=MAKEWORD(2,2);</p><p>  err=WSAStartup(wVersionRequsdted,&WSAData);</p><

65、p>  if(err!=0){</p><p>  printf("sock init fail!\n");</p><p>  return(-1);</p><p><b>  }</b></p><p>  cout<<"please input the IP of

66、host:";</p><p>  scanf("%s",&IP);</p><p>  addrServer.sin_addr.s_addr=inet_addr(IP);//計(jì)算機(jī)IP地址</p><p>  return(1);</p><p><b>  }</b></p

67、><p>  DWORD ConnectServer() //連接服務(wù)器</p><p><b>  {</b></p><p>  sockClient=socket(AF_INET,SOCK_STREAM,0);//創(chuàng)建套接字,SOCK_STREAM為面向連接型</p><p>  if(sockClient==S

68、OCKET_ERROR)</p><p><b>  {</b></p><p>  printf("sock create fail! \n");</p><p>  WSACleanup();//中止Windows Sockets DLL的使用.</p><p>  return(-1);<

69、/p><p><b>  }</b></p><p>  if(connect(sockClient,(struct sockaddr *)&addrServer,sizeof(addrServer))==SOCKET_ERROR)//如果請(qǐng)求建立連接錯(cuò)誤</p><p><b>  {</b></p>

70、<p>  printf("Connect fail \n");</p><p>  memset(IP,0,20);</p><p>  return(-1);</p><p><b>  }</b></p><p>  return(1);</p><p><

71、;b>  }</b></p><p>  void help()</p><p><b>  {</b></p><p>  cout<<"help List:"<<endl;</p><p>  cout<<"dir…………………………

72、……directory list "<<endl;</p><p>  cout<<"get………………………………download files"<<endl;</p><p>  cout<<"put………………………………upload files "<<endl;</p

73、><p>  cout<<"quit………………………………exit !"<<endl;</p><p><b>  }</b></p><p>  //list讀取服務(wù)器列表</p><p>  void list(SOCKET sock)</p><p>

74、;<b>  {</b></p><p>  int nRead;</p><p>  while(true)</p><p><b>  {</b></p><p>  nRead=recv(sock,rec_str,1024,0);//從一個(gè)套接口接收數(shù)據(jù)</p><p>

75、;  if(nRead==SOCKET_ERROR)</p><p><b>  {</b></p><p>  cout<<"read response error!"<<endl;</p><p><b>  exit(1);</b></p><p>

76、<b>  }</b></p><p>  if(nRead==0)//數(shù)據(jù)讀取結(jié)束</p><p><b>  break;</b></p><p><b>  //顯示數(shù)據(jù)</b></p><p>  rec_str[nRead]='\0';</p&g

77、t;<p>  printf("%s",rec_str);</p><p><b>  }</b></p><p><b>  }</b></p><p>  int SendFile(SOCKET datatcps,FILE* file)//SOCKET datatcps定義變量數(shù)據(jù)連接

78、套接字 </p><p><b>  {</b></p><p>  cout<<"sending file data.."<<endl;</p><p><b>  for(;;)</b></p><p><b>  {</b>&l

79、t;/p><p>  int r=fread(send_str,1,1024,file);//從一個(gè)流中讀數(shù)據(jù) </p><p>  if(send(datatcps,send_str,r,0)==SOCKET_ERROR)</p><p><b>  {</b></p><p>  printf("lost th

80、e connection to client!\n");</p><p>  closesocket(datatcps);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  if(r<1024)//文件傳送結(jié)束<

81、/p><p><b>  break;</b></p><p><b>  }</b></p><p>  closesocket(datatcps);//關(guān)閉接口</p><p>  printf("done\n");</p><p>  return(1)

82、;</p><p><b>  }</b></p><p>  int Cprocess()</p><p><b>  {</b></p><p>  int count;</p><p>  char order[10];</p><p>  ch

83、ar param[20];</p><p>  char command[30];</p><p><b>  FILE *fd;</b></p><p>  FILE *fd2;</p><p>  command[0]='\0';</p><p>  CreateSock();

84、</p><p>  ConnectServer();</p><p>  cout<<"please input order :"<<endl;</p><p>  memset(order,0,10);//初始化為0</p><p>  memset(param,0,20);//初始化為0<

85、;/p><p>  memset(command,0,30);//初始化為0</p><p>  memset(rec_str,0,1024);//初始化為0</p><p>  memset(send_str,0,1024);//初始化為0</p><p>  cin>>order;</p><p>  st

86、rcat(command,order);</p><p>  if(strncmp(order,"get",3)==0||strncmp(order,"put",3)==0)//輸入請(qǐng)求,有一個(gè)輸入要求正確,輸入目標(biāo)文件名</p><p><b>  {</b></p><p>  cin>>

87、param;</p><p>  strcat(command," ");</p><p>  strcat(command,param);</p><p><b>  }</b></p><p>  cout<<command<<endl;</p><p&

88、gt;  strcpy(send_str,command);</p><p>  if(send(sockClient,send_str,sizeof(send_str),0)<0)</p><p><b>  {</b></p><p>  cout<<"send data error!"<<

89、endl;</p><p>  closesocket(sockClient);</p><p>  WSACleanup();</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  recv(sockClient

90、,rec_str,1024,0);//接受鏈接數(shù)據(jù),放入rec_str</p><p>  cout<<rec_str<<endl;</p><p>  if(strncmp(command,"quit",4)==0)</p><p><b>  {</b></p><p> 

91、 closesocket(sockClient);</p><p>  WSACleanup();</p><p><b>  return 0;</b></p><p><b>  }//quit</b></p><p>  if(strncmp(rec_str,"dir",3

92、)==0)</p><p><b>  {</b></p><p>  list(sockClient);</p><p><b>  }//dir</b></p><p>  if(strncmp(rec_str,"get",3)==0)</p><p>

93、;<b>  {</b></p><p>  fd=fopen(param,"wb");//使用二進(jìn)制方式創(chuàng)建并打開名為param的文件</p><p>  if(fd==NULL) //打開失敗</p><p><b>  {</b></p><p>  printf(&q

94、uot;open file %s for weite failed!\n",param);</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  while((count=recv(sockClient,rec_str,1024,0))>0)//

95、接收文件,放入rec_str</p><p><b>  {</b></p><p>  fwrite(rec_str,sizeof(char),count,fd);}</p><p>  fclose(fd);</p><p><b>  }//get</b></p><p&g

96、t;  if(strncmp(rec_str,"put",3)==0)</p><p><b>  {</b></p><p>  strcpy(filename,rec_str+9);//復(fù)制需發(fā)送的文件名稱,賦給filename</p><p>  fd2=fopen(filename,"rb");&

97、lt;/p><p>  if(fd2)//假如讀文件成功</p><p><b>  {</b></p><p>  if(!SendFile(sockClient,fd2))//假如發(fā)送失敗</p><p><b>  { </b></p><p>  printf("

98、;send failed!");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  fclose(fd2);</p><p><b>  }</b></p><p>  else

99、//打開文件失敗</p><p><b>  {</b></p><p>  strcpy(send_str,"can't open file!\n");</p><p>  if(send(sockClient,send_str,1024,0))</p><p><b>  ret

100、urn 0;</b></p><p><b>  }</b></p><p><b>  }//put</b></p><p>  closesocket(sockClient);</p><p>  WSACleanup();</p><p>  return

101、 Cprocess();</p><p><b>  }</b></p><p>  int main()</p><p><b>  {</b></p><p><b>  help();</b></p><p>  Cprocess();</p

102、><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  5.程序運(yùn)行結(jié)果</b></p><p><b>  一.正確功能實(shí)現(xiàn)</b></p><p>  運(yùn)行客戶端,輸入服

103、務(wù)器正確IP地址,連接成功后,輸入dir查看服務(wù)器所在文件夾中的文件</p><p>  用put命令發(fā)送文件p.txt,發(fā)送完畢,查看服務(wù)器所在文件夾,發(fā)現(xiàn)p.txt存在</p><p><b>  運(yùn)行錯(cuò)誤測(cè)試</b></p><p>  1.運(yùn)行客戶端,輸入錯(cuò)誤的IP地址。輸入請(qǐng)求后,顯示框直接關(guān)閉</p><p>

104、;<b>  總結(jié)</b></p><p>  通過本次實(shí)驗(yàn),我對(duì)網(wǎng)絡(luò)命令有了一定的概念性認(rèn)識(shí),并熟悉了基本網(wǎng)絡(luò)命令的使用,通過miniFTP Client/Server實(shí)驗(yàn)的實(shí)踐,了解了SOCKET編程相關(guān)的一些知識(shí)以及用法,了解了客戶端和服務(wù)器端進(jìn)行通信的相關(guān)算法機(jī)制,在建立通信的基礎(chǔ)上,實(shí)現(xiàn)了一些簡(jiǎn)單的功能。限于自己的能力,對(duì)SOCKET編程理解還不夠透徹,對(duì)網(wǎng)絡(luò)通信也只局限

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論