多程序服務端
利用訊號**子程序例子(利用子程序結束後向父程序傳送sigchld訊號來**子程序
#include
//子程序結束訊號
void
read_childproc
(int signo)
}int
main
(int argc,
char
*ar**)
else
else
//主程序 }}
return0;
}
通過多個程序來實現併發(
由父程序來監聽連線請求,多個子程序來處理邏輯 ,因為fork後檔案描述符也被複製乙份到子程序,因為乙個埠對應乙個套接字,而此時檔案描述符多了1份,讓唯一的父程序處理連線請求,那麼去掉fork前連線成功的客戶端socket fd,
多個子程序只需要負責資料,不需要監聽,那麼關閉監聽的socket fd
#include
#define buf_size 30
void
read_childproc
(int);
intmain
(int argc,
char
*ar**)
//註冊訊號處理函式
act.sa_handler = read_childproc;
sigemptyset
(&act.sa_mask)
; act.sa_flags =0;
state =
sigaction
(sigchld,
&act,0)
;if(state ==-1
)error_handle
("sigaction error"
) serv_sock =
socket
(af_inet,sock_stream,0)
;memset
(&serv_adr,0,
sizeof
(serv_adr));
serv_adr.sin_family = af_inet;
serv_adr.sin_addr.s_addr =
htonl
(inaddr_any)
; serv_adr.sin_port =
htons
(atoi
(ar**[1]
));if
(bind
(serv_sock,
(struct sockaddr*
)&serv_adr,
sizeof
(serv_adr))==
-1)error_handle
("bind() error")if
(listen
(serv_sock,5)
==-1)
error_handle
("listen() error"
)while(1
)if(pid ==0)
else
}close
(serv_sock)
;//父程序結束,伺服器端套接字關閉
return0;
}void
read_childproc
(int signo)
分割io程式,開子程序讓2個程序分別in和out
普通回聲伺服器客戶端(寫了之後在讀:
#include
#define buf_size 1024
intmain
(int argc,
char
*ar**)
sock =
socket
(af_inet,sock_stream,0)
;if(sock ==-1
)error_handle
("socket() error");
memset
(&serv_adr,0,
sizeof
(serv_adr));
serv_adr.sin_family = af_inet;
serv_adr.sin_addr.s_addr =
inet_addr
(ar**[1]
);serv_adr.sin_port =
htons
(atoi
(ar**[2]
));if
(connect
(sock,
(struct sockaddr*
)&serv_adr,
sizeof
(serv_adr))==
-1)error_handle
("connect() error"
)else
puts
("connected...");
//已經連線上了伺服器
while(1
)close
(sock)
;return0;
}
開子程序同時讀和寫:
#include
#define buf_size 30
void
read_routine
(int
,char*)
;void
write_routine
(int
,char*)
;int
main
(int argc,
char
*ar**)
sock =
socket
(af_inet,sock_stream,0)
;memset
(&serv_adr,0,
sizeof
(serv_adr));
serv_adr.sin_family = af_inet;
serv_adr.sin_addr.s_addr =
inet_addr
(ar**[1]
);serv_adr.sin_port =
htons
(atoi
(ar**[2]
));if
(connect
(sock,
(struct sockaddr*
)&serv_adr,
sizeof
(serv_adr))==
-1)error_handle
("connect() error");
//io分割
pid =
fork()
;if(pid ==0)
else
close
(sock)
;return0;
}void
read_routine
(int sock,
char
*buf)
}void
write_routine
(int sock,
char
*buf)
write
(sock,buf,
strlen
(buf));
}}
來自<
九 多程序伺服器端
併發伺服器端的實現方法 併發伺服器可同時向發起請求的客戶端提供服務,以提高平均滿意度和有效利用cpu 實現模型和方法 多程序伺服器 多路復用伺服器 多執行緒伺服器。理解程序 程序 占用記憶體空間的的正在執行的程式。如果父程序終止,處於殭屍狀態的子程序將同時銷毀。父程序往往與子程序一樣繁忙,因此不能只...
多程序伺服器
基於tcp實現多程序伺服器 伺服器端 1 建立套接字 include include int socket int domain,int type,int protocol domain 乙個位址描述。目前僅支援af inet格式,也就是說arpa internet位址格式。type 指定socke...
多程序伺服器
注意 包含了 wrap.c 和 wrap.h 檔案在上篇部落格中 server.c include include include in.h include include include include include include wrap.h define maxline 8192 defi...