前面一篇介紹了io模型。其中重點介紹了io多路轉接中的三種模型,包括了select,poll,epoll三種。下面就是基於select模型編寫的伺服器與客戶機,兩者可以進行互動。
伺服器端**:k
#include#include#include#include#include#include#include#includeint fdarray[sizeof(fd_set)*8];
int startup(int port)
//為了防止伺服器主動斷開連線,無法連線重啟的問題
int opt = 1;
setsockopt(sock,sol_socket,so_reuseaddr,&opt,sizeof(opt));
struct sockaddr_in local;
local.sin_family = af_inet;
local.sin_addr.s_addr = htonl(inaddr_any);
local.sin_port = htons(port);
if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0)
if(listen(sock,5)<0)
return sock;
}// ./select_server 8080
int main(int argc,char* argv)
int listen_sock = startup(atoi(argv[1]));
//已經建立listen_sock
fdarray[0] = listen_sock;//合法的描述符
int num = sizeof(fdarray)/sizeof(fdarray[0]);
int i = 1;
for(i;i=0)
//struct sockaddr_in client;
client.sin_port = htons(atoi(argv[1]));
client.sin_family = af_inet;
client.sin_addr.s_addr = htonl(inaddr_any);
//建立套接字
int sock = socket(af_inet,sock_stream,0);
if(sock<0)
//連線伺服器
if(connect(sock,(struct sockaddr*)&client,sizeof(client))<0)
for(;;)
;read(0,buf,sizeof(buf)-1);
//將訊息寫給檔案描述符
if(write(sock,buf,strlen(buf))<0)
//將伺服器返回的訊息寫到buf裡
int ret = read(sock,buf,sizeof(buf)-1);
if(ret<0)
if(ret==0)
printf("server:%s\n",buf);
}close(sock);
return 0;
}
這樣通過客戶端與伺服器的互動就可以互通訊息了。 基於Select模型的UDP TCP混合程式設計
selecttestserver.cpp 定義控制台應用程式的入口點。tcp udp復用server select非阻塞模式 ip 127.0.0.1 tcp port 5001 udp port 5000 include stdafx.h include pragma comment lib,ws...
基於事件套接字集合的select 模型
基於事件套接字集合的select 模型 select 選擇 模型是winsock 中最常見的i o 模型。之所以稱其為 select 模型 是由於它的 中心思想 便是利用select 函式,實現對i o 的管理!最初設計該模型時,主要面向的是某些使用unix 作業系統的計算機,它們採用的是berke...
基於select模型的udp客戶端實現超時機制
參考 多路選擇i o select模型 其思想在於使用乙個集合,該集合中包含需要進行讀寫的fd,通過輪詢這個集合,直到有乙個fd可讀寫,才返回。與阻塞i o不同的是,阻塞i o僅使用了一次系統呼叫,就是對fd的讀寫,如果沒有fd處於就緒狀態,則程序一直阻塞,而多路選擇i o使用了兩次系統呼叫,第一次...