process-per-connection
乙個連線由乙個程序來處理併發
socket程式設計(二)中的基本回射伺服器,這個時候伺服器只允許乙個客戶端對它進行連線,不允許多個客戶端進行連線
因為乙個客戶端連線過來,伺服器就處於為它服務的狀態;即使再有客戶端連線過來,伺服器也無法接收它;我們的程式處於乙個死迴圈的狀態,沒有能力去再呼叫乙個accept來接收新的客戶端。
這個時候我們就可以建立乙個程序來處理這個連線。
n個連線是有n+1個程序來處理的,父程序用來處理和客戶端的連線,子程序用來處理每個連線的通訊細節。
伺服器端需要兩個套接字,乙個是監聽套接字sockfd,另乙個是已連線套接字conn。sockfd是用來監聽,用來接收三次握手資料,一旦三次握手過程完成,那麼就將它放到已連線佇列,已連線佇列返回乙個連線即已連線套接字conn(它主要用來與客戶端進行通訊,是個主動套接字)。如果有n個客戶端,那麼伺服器就有乙個監聽套接字sockfd和n個已連線套接字conn。
以下是在基本回射伺服器的基礎上,設計的多程序回射伺服器。
服務端**echo-process-server.c
#include #include #include #include #include #include #include #include #include #define err_exit(m)
void do_service(int conn)
if(ret==-1)
fputs(recvbuf,stdout);
write(conn,recvbuf,ret);
}}int main(void)
else
close(conn);//parent-process do not need the connected socket,
//so we close it
}return 0;
}
echo-process-client.c客戶端**
#include #include #include #include #include #include #include #include #include #define err_exit(m)
int main(void)
; char recvbuf[1024]=;
while(fgets(sendbuf,sizeof(sendbuf),stdin)!=null)
close(sock);
return 0;
}
socket 多程序通訊
之前寫的那個socket太次了。只能連乙個,所以優化了一下。我管他叫superserver。獻上 include include include include include include include intmain int argc,const char ar int fd socket ...
多程序伺服器
基於tcp實現多程序伺服器 伺服器端 1 建立套接字 include include int socket int domain,int type,int protocol domain 乙個位址描述。目前僅支援af inet格式,也就是說arpa internet位址格式。type 指定socke...
多程序伺服器
注意 包含了 wrap.c 和 wrap.h 檔案在上篇部落格中 server.c include include include in.h include include include include include include wrap.h define maxline 8192 defi...