(六)多程序實現TCP服務端

2021-07-25 21:55:20 字數 1428 閱讀 2777

首先,為什麼要用多程序處理,多程序的好處是可靠性高,而且在處理大量資料的時候,多程序的速度會比多執行緒快,所有多程序還是要掌握的。

在一些實際專案中,程序和執行緒要根據實際場景用。

但是多程序是不能共享程序空間的,所以有很多變數都不能共享。除了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 ...