多程序伺服器端

2021-10-24 01:49:09 字數 3720 閱讀 9019

多程序服務端

利用訊號**子程序例子(利用子程序結束後向父程序傳送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...