網絡編程實習報告

時間:2022-10-09 22:23:32 實習報告范文 我要投稿
  • 相關推薦

網絡編程實習報告

  一段忙碌又充實的實習生活又告一段落了,相信你一定有很多值得分享的收獲,在實習報告中記錄下這來之不易的成果吧。你所見過的實習報告應該是什么樣的?以下是小編整理的網絡編程實習報告,歡迎閱讀與收藏。

網絡編程實習報告

  [實習目的]

  通過理論聯系實際,鞏固所學的知識,提高處理實際問題的能力,并為自己能順利與社會環境接軌做準備。

  [實習任務]

  Linux下網絡服務器開發;本文總結了我對Linux下網絡服務器模型的認識。

  [實習內容]

  一、循環服務器

  1、循環服務器在同一個時刻只可以響應一個客戶端的請求,對多個客戶程序的處理是采用循環的方式進行。

  2、UDP循環服務器的實現非常簡單:UDP服務器每次從套接字上讀取一個客戶端的請求,處理,然后將結果返回給客戶機。

  2.1、算法如下:socket(...);

  bind(...);

  while(1)

  {

  recvfrom(...);

  process(...);

  sendto(...);

  }

  3、TCP循環服務器的實現也不難:TCP服務器接受一個客戶端的連接,然后處理,完成了這個客戶的所有請求后,斷開連接。

  3.1、算法如下:

  socket(...);

  bind(...);

  listen(...);

  while(1)

  {

  accept(...);

  while(1)

  {

  read(...);

  process(...);write(...);

  }

  close(...);

  }

  3.2、TCP循環服務器一次只能處理一個客戶端的請求。只有在這個客戶的所有請求都滿足后,服務器才可以繼續后面的請求。這樣如果有一個客戶端占住服務器不放時,其它的客戶機都不能工作了。因此,TCP服務器一般很少用循環服務器模型的。

  二、并發服務器

  1、為了彌補循環TCP服務器的缺陷,人們又想出了并發服務器的模型。并發服務器的思想是每一個客戶機的請求并不由服務器直接處理,而是服務器創建一個子進程來處理。

  2、使用并發服務器可以使服務器進程在同一個時刻有多個子進程和不同的客戶程序連接、通信;在客戶程序看來,服務器可以同時并發地處理多個客戶的請求。

  3、算法如下:socket(...);

  bind(...);

  listen(...);

  while(1)

  {

  accept(...);

  if(fork(..)==0)

  {

  close(...);while(1)

  {

  read(...);

  廣東應屆生實習報告網在線編輯整理本文。

  process(...);

  write(...);

  }

  close(...);

  exit(...);

  }

  close(...);

  }

  4、TCP并發服務器可以解決TCP循環服務器客戶機獨占服務器的情況,改善了對客戶程序的響應速度;不過也同時帶來了一個不小的問題:為了響應客戶機的請求,服務器要創建子進程來處理,而創建子進程是一種非常消耗資源的操作,這明顯增加了系統調度的開銷。

  5、為了解決創建子進程帶來的系統資源消耗,人們又想出了多路復用I/O模型。

  5.1、該模型一般用函數select和相關的四個宏定義:int select(int fd,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout)

  void FD_SET(int fd,fd_set *fdset)

  void FD_CLR(int fd,fd_set *fdset)

  void FD_ZERO(fd_set *fdset)

  int FD_ISSET(int fd,fd_set *fdset)

  5.2、一般的來說當我們在向文件讀寫時,進程有可能在讀寫時候阻塞,直到一定的條件滿足。

  比如我們從一個套接字讀數據時,可能緩沖區里面沒有數據可讀(通信的對方還沒有發送數據過來),這個時候我們的讀調用就會等待(阻塞)直到有數據可讀.如果我們不希望阻塞,我們的一個選擇是把socket設置為非阻塞模式來實現;int socketfd;socketfd=socket(AF_INET,SOCK_STREAM,0);fcntl(socketfd,F_SETFL,O_NONBLOCK);通過設置socket為非阻塞模式,可以實現“輪循”多個socket,當企圖從一個沒有數據等待處理的非阻塞socket讀取數據時,函數立即返回,但是這種“輪循”會使CPU處于忙等待方式,降低了性能,select函數解決了這個問題;

  5.3、在我們調用select時進程會一直阻塞直到以下的一種情況發生。

  1)有文件可以讀.

  2)有文件可以寫.

  3)超時所設置的時間到;

  5.4、算法如下:

  初始化(socket,bind,listen;

  while(1)

  {設置監聽讀寫文件描述符(FD_*);

  調用select;

  如果是傾聽套接字就緒,說明一個新的連接請求建立;

  建立連接(accept);

  加入到監聽文件描述符中去;

  否則說明是一個已經連接過的描述符

  進行操作(read或者write);}

  多路復用I/O廣東應屆生實習報告網在線編輯整理本文。

  可以解決資源限制的問題。著模型實際上是將UDP循環模型用在了TCP上面。這也就帶來了一些問題。如由于服務器依次處理客戶的請求,所以可能會導致有的客戶會等待很久。

  三、I/O模型

  1、網絡服務器模型根據I/O模型的不同實現而來的。

  2、I/O模型分為同步I/O和異步I/O;同步I/O又包括阻塞I/O、非阻塞I/O、信號驅動I/O、多路復用I/O;可根據不同的要求利用不同的I/O模型實現不同是網絡服務器。

  [實習心得]

  通過近幾個月的實習,基本上掌握了Linux下C語言網絡編程的一些算法和技巧,提高了自己的能力。

【網絡編程實習報告】相關文章:

網絡編程簡歷范文07-26

編程實習心得09-29

網絡編程專業個人簡歷模板08-09

網絡實習報告11-24

網絡的實習報告11-28

網絡優化實習報告10-23

網絡編輯實習報告06-09

網絡認識實習報告02-15

關于網絡的實習報告02-14

亚洲制服丝袜二区欧美精品,亚洲精品无码视频乱码,日韩av无码一区二区,国产人妖视频一区二区
亚洲青青青在线视频 | 日本入室强伦姧bd在线观看 | 久久久久久国产精选Av香蕉 | 日韩另类在线综合国产 | 亚洲思思久久99 | 亚洲综合另类专区在线 |