基於多程序併發的面向連線伺服器例程 伺服器端

2021-09-11 03:23:07 字數 1829 閱讀 4179

該伺服器所實現的功能為:首先,等候客戶連線請求,一旦連線成功則顯示客戶的ip位址,然後,再接收該客戶的名字並顯示;最後,接收來自使用者的其他資訊,當每收到乙個字串時,首先顯示該字串,然後再將該字串反轉後的字串回送給該客戶端

#include #include //linux標準標頭檔案,包含了各種linux系統服務函式原型和資料結構的定義

#include //基本資料型別標頭檔案,包含有基本系統資料型別定義

#include //提供套接字函式原型與資料結構的定義

#include //提供資料結構sockaddr_in的定義

#include //提供ip位址轉函式原型的定義

#include #include #include #define port 1234 //定義伺服器端埠

#define qlen 10 //定義允許排隊的連線數

#define bufsize 1024 //定義緩衝區大小為1024b

void sig_chld(int); //宣告sig_chld()函式

void process_cli(int connectfd,struct sockaddr_in client); //宣告用於處理與客戶之間通訊的子函式

int main()

int opt = so_reuseaddr; //設定與主套接字關聯的選項,允許主套接字重用本地位址和埠

setsockopt(listenfd,sol_socket,so_reuseaddr,&opt,sizeof(opt));

bzero(&server,sizeof(server)); //清空伺服器端點位址結構體變數

//以下**段用於對伺服器端點位址結構體變數進行賦值

server.sin_family = af_inet;

server.sin_port = htons(port);

server.sin_addr.s_addr = htonl(inaddr_any);

//呼叫bind()函式將主套接字繫結到伺服器的端點位址

if(bind(listenfd,(struct sockaddr*)&server,sizeof(struct sockaddr)) == -1)

if(listen(listenfd,qlen) == -1) //呼叫listen()函式使主套接字處於被動監聽模式,並為主套接字建立乙個資料輸入佇列

ssize = sizeof(struct sockaddr_in);

signal(sigchld,sig_chld); //呼叫signal()函式為sigchld訊號安裝handler

while(1) //迴圈呼叫accpet()函式接受客戶連線請求,建立連線,並建立新的從套接字connectfd用於處理該連線

if((pid = fork()) > 0) //呼叫fork()函式建立新的從程序

else if(pid == 0)

else

}close(listenfd); //主程序結束時關閉主套接字

return 0;

}void process_cli(int connectfd,struct sockaddr_in client)

cli_name[num-1] = '\0'; //在字串末尾新增字串結束符

printf("client's name is %s.\n",cli_name); //列印輸出客戶的名字

while(num = recv(connectfd,recvbuf,bufsize,0)) //迴圈接收來自客戶的其他資訊

return;

}

基於多程序併發的面向連線伺服器例程 客戶端

客戶端首先與伺服器相連,接著傳送客戶端名字,然後傳送客戶資訊,接收到伺服器資訊並顯示,之後等待使用者輸入ctrl d,就關閉連線退出 include include linux標準標頭檔案,包含了各種linux系統服務函式原型和資料結構的定義 include include 基本資料型別標頭檔案,含...

併發伺服器 多程序實現

通過簡單的socket可以實現一對一的c s通訊,當多個客戶端同時進行伺服器訪問,那麼伺服器只能按序的一一進行處理,除了第乙個客戶端,其餘客戶端都會陷入等待。並且這樣的程式只能實現半雙工通訊 資料能雙向傳輸,但同一時刻只能單向傳遞,通過切換傳輸方向實現雙工 而且實現方式繁瑣,功能拘束,實用價值很低。...

linux多程序併發伺服器

多程序併發伺服器,多執行緒版 include include include include include include include include include include include 程序 函式 void recyle int num int main int argc,cha...