該伺服器所實現的功能為:首先,等候客戶連線請求,一旦連線成功則顯示客戶的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...