與多程序相同,採用多執行緒可以實現併發伺服器,並且由於執行緒的系統開銷小,切換時間短,對於需要處理大量客戶的伺服器而言其具有更大的優勢,實現多執行緒併發伺服器的基本流程是:當建立連線以後,伺服器呼叫pthread_create()函式產生新的執行緒,由新的執行緒來處理客戶端的請求,同時主線程等待另乙個客戶的連線請求,其中的典型的模板如下:
#include
#include
#include
#include
#include
#include
/***********function to be executed by the new thread**************/
void *start_routine((void *)arg);
int main()
}//總之就是要實現多執行緒的功能就是把執行緒的申明放在建立連線之後
以下是實現 一次啟動server端和client端後,首先由server端發『1』給client端,client端將接收到的資料加1後,發該資料給server端,server端再將資料加1後發給client端,依次類推。直到server端收到資料20,client收到19時,兩方中斷收發功能的伺服器和客戶端的程式實現:(應用多執行緒網路程式設計實現)
# include
# include
# include
# include
# include
#include
void deal(int connfd1);
int main(int argc,char **argv)
}close(listenfd);
return 0;
}/****************the function of deal()***********************/
void deal(int connfd)
/***********read the information****************/
if(read(connfd,recvline,1024)==0)
n=atoi(recvline);
printf("the server accept is:%d\n",n);
}close(connfd);
pthread_exit(null);}
客戶端的實現如下:
# include
# include
# include
# include
# include
#include
int main(int argc,char **argv)
if((sockfd=socket(af_inet,sock_stream,0))<0)
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=af_inet;
servaddr.sin_port=htons(1032);//把數值轉換成網路位元組值
if((inet_pton(af_inet,argv[1],&(servaddr.sin_addr)))<0)
//建立與伺服器的鏈結
if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0)//本語句中之所以可以用servaddr是因為,客戶端與伺服器端的埠號和ip位址是一樣的
while(n<19)
n=atoi(recvline);
printf("the client accept is:%d\n",n);
sprintf(sendline,"%d",(n+1));
write(sockfd,sendline,strlen(sendline));
printf("the client send is:%d\n",(n+1));
}exit(0);
}
Linux網路程式設計 多執行緒
首先多執行緒是在乙個程序內建立出多個執行緒的模型,也就是多個執行緒共用乙個程序中的資源,來實現對乙個程序中的多個事務進行處理的模型。主線程就是通過main函式進入的執行緒,由主線程呼叫pthread create 建立的執行緒均稱為子執行緒,每個執行緒都有自己的執行緒id,可以通過pthread s...
Linux多執行緒網路程式設計(一)
再次開始網路程式設計已經是乙個學期之後了。上個學期完成網路程式設計之後還沒有來得及總結,最近重新開始網路程式設計還遇到了不少的麻煩。直奔主題 在伺服器端實現的功能 1.通過tcp ip 協議,獲取客戶端傳送的檔案。2.定義了幾個簡單的指令,對客戶端進行控制。功能特點 能同時處理最多五個客戶端的請求。...
多執行緒網路程式設計
與多程序程式設計對比 1 建立多程序相比起建立多執行緒會 消耗大量的系統資源 2 程序結束比起執行緒結束,釋放的資源也更多,子程序很快結束,系統負擔加重 3.多執行緒由於在同乙個程序中,很多資源是共用的。所以執行緒間資料共享也非常高效快捷。需要注意的兩點是 1.由於多執行緒在乙個程序中,乙個程序只有...