客戶端**見:c/s通訊---伺服器阻塞型使用
伺服器端**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main()
//set local address
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family = af_inet;
servaddr.sin_addr.s_addr = htonl(inaddr_any);
servaddr.sin_port = htons(8001);
//bind the local addr to socket
if(bind(socket_fd,(struct sockaddr*)&servaddr,sizeof(servaddr)) == -1)
//listen client
if(listen(socket_fd,5) == -1)
printf("伺服器已經啟動!\n");
fd_set fdset;
int accept_fd[4096]=;
while(1)
//fd_set fdread = fdset;
int ret = select(6,&fdset,0,0,0); //判斷集合中是否有時間發生,沒有時間發生的套接字將移出集合
if(ret > 0) //套接字有事件發生
;int len = recv(accept_fd[i],buff,4096,0);
if(len > 0)
}else}}
if(fd_isset(socket_fd,&fdset))
int j =0 ;
for(;j<4096;j++)
}if(j == 4096)}}
else if(ret == 0)
else
}close(socket_fd);
}
IO多路復用模型之Select
在unix c中,socket相關的函式操作都是阻塞式的,在單執行緒下服務端只能處理乙個客戶端請求。採用多執行緒處理客戶端請求,雖然能充分發揮多核cpu能力,但是在客戶端連線過多,併發度維持相對較高水平時,多執行緒引起執行緒的上下文切換將導致系統效率低下。select多路復用模型的核心思想,在單執行...
多路復用IO模型之select
多路i o復用表示支援多個任務同時對某一程序的i o程序操作,普通的read write只能實現同一時間操作乙個,無法實現網路通訊的併發操作。那麼多路復用i o分為三種機制 select poll epoll 1.占用記憶體多 2.程序 執行緒 切換時間多。3.程序 執行緒 之間同步麻煩 在主控執行...
IO多路復用 select
select系統呼叫的目的是 在一段指定時間內,監聽使用者感興趣的檔案描述符上的可讀 可寫和異常事件。poll和select應該被歸類為這樣的系統 呼叫,它們可以阻塞地同時探測一組支援非阻塞的io裝置,直至某乙個裝置觸發了事件或者超過了指定的等待時間 也就是說它們的職責不是做io,而是幫助 呼叫者尋...