Socket通訊(三)多程序伺服器的實現

2021-09-01 16:04:38 字數 1291 閱讀 8344

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...