久久精品99久久|国产剧情网站91|天天色天天干超碰|婷婷五天月一av|亚州特黄一级片|亚欧超清无码在线|欧美乱码一区二区|男女拍拍免费视频|加勒比亚无码人妻|婷婷五月自拍偷拍

實(shí)習(xí)報(bào)告

網(wǎng)絡(luò)編程實(shí)習(xí)報(bào)告

時間:2022-10-07 16:06:46 實(shí)習(xí)報(bào)告 我要投稿
  • 相關(guān)推薦

網(wǎng)絡(luò)編程實(shí)習(xí)報(bào)告

  [實(shí)習(xí)目的]

網(wǎng)絡(luò)編程實(shí)習(xí)報(bào)告

  通過理論聯(lián)系實(shí)際,鞏固所學(xué)的知識,提高處理實(shí)際問題的能力,并為自己能順利與社會環(huán)境接軌做準(zhǔn)備。[實(shí)習(xí)任務(wù)]Linux下網(wǎng)絡(luò)服務(wù)器開發(fā);本文總結(jié)了我對Linux下網(wǎng)絡(luò)服務(wù)器模型的認(rèn)識。

  [實(shí)習(xí)內(nèi)容]

  一.循環(huán)服務(wù)器

  1.循環(huán)服務(wù)器在同一個時刻只可以響應(yīng)一個客戶端的請求,對多個客戶程序的處理是采用循環(huán)的方式進(jìn)行;

  2.UDP循環(huán)服務(wù)器的實(shí)現(xiàn)非常簡單:UDP服務(wù)器每次從套接字上讀取一個客戶端的請求,處理,然后將結(jié)果返回給客戶機(jī);

  2.1.算法如下:

  socket(...);

  bind(...);

  while(1)

  {

  recvfrom(...);

  process(...);

  sendto(...);

  }

  3.TCP循環(huán)服務(wù)器的實(shí)現(xiàn)也不難:TCP服務(wù)器接受一個客戶端的連接,然后處理,完成了這個客戶的所有請求后,斷開連接;

  3.1.算法如下:

  socket(...);

  bind(...);

  listen(...);

  while(1)

  {

  accept(...);

  while(1)

  {

  read(...);

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

  }

  close(...);

  }

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

  二.并發(fā)服務(wù)器

  1.為了彌補(bǔ)循環(huán)TCP服務(wù)器的缺陷,人們又想出了并發(fā)服務(wù)器的模型。并發(fā)服務(wù)器的思想是每一個客戶機(jī)的請求并不由服務(wù)器直接處理,而是服務(wù)器創(chuàng)建一個子進(jìn)程來處理;

  2.使用并發(fā)服務(wù)器可以使服務(wù)器進(jìn)程在同一個時刻有多個子進(jìn)程和不同的客戶程序連接、通信;在客戶程序看來,服務(wù)器可以同時并發(fā)地處理多個客戶的請求;

  3.算法如下:

  socket(...);

  bind(...);

  listen(...);

  while(1)

  {

  accept(...);

  if(fork(..)==0)

  {

  close(...);while(1)

  {

  read(...);

  。

  process(...);

  write(...);

  }

  close(...);

  exit(...);

  }

  close(...);

  }

  4.TCP并發(fā)服務(wù)器可以解決TCP循環(huán)服務(wù)器客戶機(jī)獨(dú)占服務(wù)器的情況,改善了對客戶程序的響應(yīng)速度;不過也同時帶來了一個不小的問題:為了響應(yīng)客戶機(jī)的請求,服務(wù)器要創(chuàng)建子進(jìn)程來處理,而創(chuàng)建子進(jìn)程是一種非常消耗資源的操作,這明顯增加了系統(tǒng)調(diào)度的開銷;

  5.為了解決創(chuàng)建子進(jìn)程帶來的系統(tǒng)資源消耗,人們又想出了多路復(fù)用I/O模型.

  5.1.該模型一般用函數(shù)select和相關(guān)的四個宏定義:intselect(intfd,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout)

  voidFD_SET(intfd,fd_set*fdset)

  voidFD_CLR(intfd,fd_set*fdset)

  voidFD_ZERO(fd_set*fdset)

  intFD_ISSET(intfd,fd_set*fdset)

  5.2.一般的來說當(dāng)我們在向文件讀寫時,進(jìn)程有可能在讀寫時候阻塞,直到一定的條件滿足.比如我們從一個套接字讀數(shù)據(jù)時,可能緩沖區(qū)里面沒有數(shù)據(jù)可讀(通信的對方還沒有發(fā)送數(shù)據(jù)過來),這個時候我們的讀調(diào)用就會等待(阻塞)直到有數(shù)據(jù)可讀.如果我們不希望阻塞,我們的一個選擇是把socket設(shè)置為非阻塞模式來實(shí)現(xiàn);intsocketfd;socketfd=socket(AF_INET,SOCK_STREAM,0);fcntl(socketfd,F_SETFL,O_NONBLOCK);通過設(shè)置socket為非阻塞模式,可以實(shí)現(xiàn)“輪循”多個socket,當(dāng)企圖從一個沒有數(shù)據(jù)等待處理的非阻塞socket讀取數(shù)據(jù)時,函數(shù)立即返回,但是這種“輪循”會使CPU處于忙等待方式,降低了性能,select函數(shù)解決了這個問題;

  5.3.在我們調(diào)用select時進(jìn)程會一直阻塞直到以下的一種情況發(fā)生.1)有文件可以讀.2)有文件可以寫.3)超時所設(shè)置的時間到;

  5.4.算法如下:

  初始化(socket,bind,listen

  while(1)

  {設(shè)置監(jiān)聽讀寫文件描述符(FD_*);

  調(diào)用select;

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

  建立連接(accept);

  加入到監(jiān)聽文件描述符中去;

  否則說明是一個已經(jīng)連接過的描述符

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

  多路復(fù)用I/O

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

  三.I/O模型

  1.網(wǎng)絡(luò)服務(wù)器模型根據(jù)I/O模型的不同實(shí)現(xiàn)而來的;2.I/O模型分為同步I/O和異步I/O;同步I/O又包括阻塞I/O、非阻塞I/O、信號驅(qū)動I/O、多路復(fù)用I/O;可根據(jù)不同的要求利用不同的I/O模型實(shí)現(xiàn)不同是網(wǎng)絡(luò)服務(wù)器。[實(shí)習(xí)心得]通過近幾個月的實(shí)習(xí),基本上掌握了Linux下C語言網(wǎng)絡(luò)編程的一些算法和技巧,提高了自己的能力。專業(yè):計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)班級:03631學(xué)號:63103089姓名:呂亮亮——XX.05.23&nbsp

【網(wǎng)絡(luò)編程實(shí)習(xí)報(bào)告】相關(guān)文章:

數(shù)控編程實(shí)習(xí)報(bào)告參考10-07

數(shù)控編程專業(yè)畢業(yè)實(shí)習(xí)報(bào)告10-08

編程實(shí)習(xí)心得10-09

網(wǎng)絡(luò)編程個人求職信范文10-06

計(jì)算機(jī)網(wǎng)絡(luò)編程中VB編程的運(yùn)用研究論文10-09

大學(xué)生數(shù)控編程實(shí)習(xí)報(bào)告模板10-06

網(wǎng)絡(luò)的實(shí)習(xí)報(bào)告05-11

網(wǎng)絡(luò)實(shí)習(xí)報(bào)告06-09

網(wǎng)絡(luò)實(shí)習(xí)報(bào)告06-14

網(wǎng)絡(luò)認(rèn)識實(shí)習(xí)報(bào)告02-15