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

2021-09-11 03:51:33 字數 1850 閱讀 5455

客戶端首先與伺服器相連,接著傳送客戶端名字,然後傳送客戶資訊,接收到伺服器資訊並顯示,之後等待使用者輸入ctrl+d,就關閉連線退出

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

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

#include //提供套接字函式原型的定義

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

#include //含有hostent結構與gethostbyname函式的定義

#include #define port 1234 //定義埠號

#define bufsize 100 //定義緩衝區大小

void process(file *fp,int sockfd); //宣告用於處理與伺服器之間的通訊子函式

char *getmessage(char *sendline,int line,file *fp); //宣告用於實現接受使用者鍵盤輸入資料的子函式

int main(int argc,char *ar**)

if((he=gethostbyname(ar**[1]))==null) //呼叫gethostbyname()由使用者輸入的遠端伺服器的十進位制ip位址獲得其二進位制的ip位址

if((fd = socket(af_inet,sock_stream,0)) == -1) //建立套接字

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

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

server.sin_family = af_inet;

server.sin_port=htons(port);

server.sin_addr = *((struct in_addr *)he->h_addr);

if(connect(fd,(struct sockaddr *)&server,sizeof(struct sockaddr)) == -1) //呼叫connect()函式向遠端伺服器發出連線請求

process(stdin,fd); //呼叫子process()函式基於新建立的套接字與伺服器之間進行互動

close(fd); //互動完畢,關閉套接字

return 0;

}void process(file *fp,int sockfd)

send(sockfd,sendline,strlen(sendline),0); //將sendline中快取的客戶端名字傳送給伺服器

while(getmessage(sendline,bufsize,fp)!=null) //迴圈呼叫getmessage()函式接受使用者鍵盤輸入的資訊並存入緩衝區sendline

recvline[numbytes] = '\0'; //在字串末尾新增字串結束符號

printf("server message:%s\n",recvline); //列印輸出伺服器的回送資訊內容 }

原始碼:

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

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

併發伺服器 多程序實現

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

linux多程序併發伺服器

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