首先,為什麼要用多程序處理,多程序的好處是可靠性高,而且在處理大量資料的時候,多程序的速度會比多執行緒快,所有多程序還是要掌握的。
在一些實際專案中,程序和執行緒要根據實際場景用。
但是多程序是不能共享程序空間的,所以有很多變數都不能共享。除了fork()之前的變數是可以共享的。
下面的**基本邏輯就是,用父程序來 accept,檢測有沒有新的客戶端要連入,用子程序來接受客戶端發來的資訊
下面給出服務端的**:(有詳細注釋)
#include"myhead.h"
char rbuf[50];
char wbuf[50];
char ipbuf[50];
int main()
//設定埠復用
err = setsockopt(sockfd,sol_socket,so_reuseaddr,&opt,sizeof opt);
if(err<0)
//繫結套接字和ip,位址資訊
err = bind(sockfd,(struct sockaddr*)&saddr,len);
if(err<0)
//開始監聽
listen(sockfd,10);
//迴圈接收 客戶端的連入
while(1)
//有新的客戶端連入,則列印他的ip和埠
inet_ntop(af_inet,(void*)&caddr.sin_addr.s_addr,
ipbuf,50);
printf("the client:%s is in\n",
ipbuf);
//建立乙個子程序來接受新客戶端的資訊
pid = fork();
if(pid<0) //fork失敗
else if(pid == 0) //子程序
//若recv的返回=0,表示客戶端已經斷開
else if(err == 0)
//讀取客戶端的資訊
else
}} else if(pid>0) //父程序,用於繼續監測有沒有新的客戶端連入
}}
再給出客戶端的**:
客戶端的沒啥好說的,通用的客戶端**就可以
#include "myhead.h"
char wbuf[50];
int main()
err = setsockopt(sockfd,sol_socket,so_reuseaddr,&opt,sizeof opt);
if(err<0)
err = connect(sockfd,(struct sockaddr*)&saddr,
sizeof(struct sockaddr));
if(err<0)
while(1)
}
TCP服務端實現併發
socket 在 tcp 協議下通訊 客戶端import socket 建立客戶端tcp協議通訊 c socket.socket 與指定服務端握手 c.connect 127.0.0.1 8080 通訊迴圈 while true 向服務端傳送資訊 msg input if len msg 0 con...
tcp協議服務端實現併發
socket 在 tcp 協議下通訊 客戶端 import socket 建立客戶端tcp協議通訊 c socket.socket 與指定服務端握手 c.connect 127.0.0.1 8080 通訊迴圈 while true 向服務端傳送資訊 msg input if len msg 0 co...
《網路程式設計》 第10章 多程序服務端
具有代表性的併發伺服器端實現模型 多程序伺服器 通過建立多個程序提供服務 多路復用伺服器 通過 並統一管理i o物件提供服務 多執行緒伺服器 通過生成與客戶端等量的執行緒提供服務。include pid t fork 功能 建立乙個程序。返回值 失敗,返回 1 成功,返回程序id 父程序 fork ...