網(wǎng)絡編程實習報告
通過理論聯(lián)系實際,鞏固所學的知識,提高處理實際問題的能力,并為自己能順利與社會環(huán)境接軌做準備。[實習任務]Linux下網(wǎng)絡服務器開發(fā);本文總結了我對Linux下網(wǎng)絡服務器模型的認識。[實習內(nèi)容]一.循環(huán)服務器1.循環(huán)服務器在同一個時刻只可以響應一個客戶端的請求,對多個客戶程序的處理是采用循環(huán)的方式進行; 2. UDP循環(huán)服務器的實現(xiàn)非常簡單:UDP服務器每次從套接字上讀取一個客戶端的請求,處理, 然后將結果返回給客戶機;2.1.算法如下: socket(...);

bind(...);
while(1)
{
recvfrom(...);
process(...);
sendto(...);
}3. TCP循環(huán)服務器的實現(xiàn)也不難:TCP服務器接受一個客戶端的連接,然后處理,完成了這個客戶的所有請求后,斷開連接;3.1. 算法如下:
socket(...);
bind(...);
listen(...);
while(1)
{
accept(...);
while(1)
{
read(...);
process(...);write(...);
}
close(...);
}3.2. TCP循環(huán)服務器一次只能處理一個客戶端的請求.只有在這個客戶的所有請求都滿足后, 服務器才可以繼續(xù)后面的請求.這樣如果有一個客戶端占住服務器不放時,其它的客戶機都不能工作了.因此,TCP服務器一般很少用循環(huán)服務器模型的. 二. 并發(fā)服務器1. 為了彌補循環(huán)TCP服務器的缺陷,人們又想出了并發(fā)服務器的模型。 并發(fā)服務器的思想是每一個客戶機的請求并不由服務器直接處理,而是服務器創(chuàng)建一個 子進程來處理;2.使用并發(fā)服務器可以使服務器進程在同一個時刻有多個子進程和不同的客戶程序連接、通信;在客戶程序看來,服務器可以同時并發(fā)地處理多個客戶的請求; 3.算法如下:socket(...);
bind(...);
listen(...);
while(1)
{
accept(...);
if(fork(..)==0)
{
close(...);while(1)
{
read(...);
廣東應屆生大學網(wǎng)在線編輯整理本文。
process(...);
write(...);
}
close(...);
exit(...);
}
close(...);
} 4. TCP并發(fā)服務器可以解決TCP循環(huán)服務器客戶機獨占服務器的情況,改善了對客戶程序的響應速度; 不過也同時帶來了一個不小的問題:為了響應客戶機的請求,服務器要創(chuàng)建子進程來處理, 而創(chuàng)建子進程是一種非常消耗資源的操作,這明顯增加了系統(tǒng)調度的開銷;5. 為了解決創(chuàng)建子進程帶來的系統(tǒng)資源消耗,人們又想出了多路復用I/O模型.5.1.該模型一般用函數(shù)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. 一般的來說當我們在向文件讀寫時,進程有可能在讀寫時候阻塞,直到一定的條件滿足. 比如我們從一個套接字讀數(shù)據(jù)時,可能緩沖區(qū)里面沒有數(shù)據(jù)可讀(通信的對方還沒有 發(fā)送數(shù)據(jù)過來),這個時候我們的讀調用就會等待(阻塞)直到有數(shù)據(jù)可讀.如果我們不 希望阻塞,我們的一個選擇是把socket設置為非阻塞模式來實現(xiàn);int socketfd;socketfd=socket(AF_INET,SOCK_STREAM,0);fcntl(socketfd,F_SETFL,O_NONBLOCK);通過設置socket為非阻塞模式,可以實現(xiàn)“輪循”多個socket,當企圖從一個沒有數(shù)據(jù)等待處理的非阻塞socket讀取數(shù)據(jù)時,函數(shù)立即返回,但是這種“輪循”會使CPU處于忙等待方式,降低了性能,select函數(shù)解決了這個問題;5.3. 在我們調用select時進程會一直阻塞直到以下的一種情況發(fā)生. 1)有文件可以讀.2)有文件可以寫.3)超時所設置的時間到;5.4.算法如下: 初始化(socket,bind,listen
while(1)
{ 設置監(jiān)聽讀寫文件描述符(FD_*);
調用select;
如果是傾聽套接字就緒,說明一個新的連接請求建立
建立連接(accept);
加入到監(jiān)聽文件描述符中去;
否則說明是一個已經(jīng)連接過的描述符
進行操作(read或者write); }
多路復用I/O
[網(wǎng)絡編程實習報告]
【網(wǎng)絡編程實習報告】相關文章:
計算機編程實習報告08-04
編程實習心得07-10
網(wǎng)絡編程工程師求職簡歷09-01
軟件編程實習總結07-22
網(wǎng)絡銷售實習報告10-07
網(wǎng)絡推廣實習報告10-10
網(wǎng)絡編輯實習報告07-17
網(wǎng)絡編輯實習報告09-13
大學生編程實習工作報告10-30
軟件編程實習總結范文09-13