TCP併發伺服器多程序程式設計

2021-08-17 05:32:57 字數 2569 閱讀 6885

環境:linux c

功能:併發伺服器實現cs通訊

/*server.c*/

#include

#include

#include

#include

#include

#include //檔案io read write close fork waitpid

#include //socket() struct sockaddr_in  htonl htons 

#include //socket()

#include //inetaddr() inet_pton()

#include //signal

#define serv_port 5001

#define serv_ip_addr "192.168.152.128"

//子程序退出的訊息處理函式

void sig_child_handler(int signo)

}int main()

//2繫結socket

填充struct sockaddr_in

struct sockaddr_in sin;

bzero(&sin,sizeof(sin));

sin.sin_family = af_inet;

sin.sin_port = htons(serv_port);//網路位元組序的埠號

#if 1 

sin.sin_addr.s_addr = htonl(inaddr_any);//代替某個ip inet_addr(serv_ip_addr) 讓伺服器能繫結在任意ip

#else

if(inet_pton(af_inet,serv_ip_addr,(void *)&sin.sin_addr.s_addr) != 1)

#endif

開始繫結socket就是給fd帶上屬性

if(bind(fd,(const struct sockaddr *)&sin,sizeof(sin)) < 0)

//3 呼叫listen()將主動套接字變成被動套接字

if(listen(fd,5) == -1)

//4 多程序併發處理客戶端連線請求 

while(1)

pid_t pid;

if((pid = fork()) < 0)

if(pid == 0)

printf("client(%s:%d) is connected\n",ipv4_addr,ntohs(cin.sin_port));

//5通過newfd進行cs通訊

char buf[bufsiz];

bzero(buf,bufsiz);

int ret;

while(1)

printf("%s",buf);

}if(ret == 0 )

else

}exit(0);

}close(newfd);

signal(sigchld,sig_child_handler);

}_exit:

//6關閉套接子

close(fd);

return 0;

}/*client.c*/

#include

#include

#include

#include

#include

#include //檔案io read write close

#include //socket() struct sockaddr_in  htonl htons 

#include //socket()

#include //inetaddr() inet_pton()

#define serv_port 5001

#define serv_ip_addr "192.168.152.128"

int main()

//2 connect()申請連線

//填充sockaddr_in()結構體

struct sockaddr_in sin;

bzero(&sin,sizeof(sin));

sin.sin_family = af_inet;

sin.sin_port = htons(serv_port);//網路位元組序的埠號

#if 0 

sin.sin_addr.s_addr = inet_addr(serv_ip_addr);

#else

if(inet_pton(af_inet,serv_ip_addr,(void *)&sin.sin_addr.s_addr) != 1)

#endif

//申請連線

if((connect(fd,(const struct sockaddr *)&sin,sizeof(sin))) < 0)

//char buf[bufsiz];

while(1)

write(fd,buf,bufsiz);

if(!strncasecmp(buf,"quit\n",4))

}//關閉套接字

close(fd);

return 0;

}

TCP多程序併發伺服器 c

其他關聯文章 丶4ut15m tcp網路程式設計 c udp網路程式設計 c 多執行緒併發伺服器 c io復用 c 多程序併發伺服器整個流程和單程序差別不太大,主要區別在互動部分.伺服器 建立套接字 繫結位址結構 監聽套接字 等待並接受連線請求 主程序建立子程序後執行上一步,子程序與客戶端進行互動 ...

Linux 併發伺服器程式設計(多程序)

在linux中通過流式套接字程式設計 tcp 實現乙個併發伺服器的訪問回顯,適合剛學完linux套接字程式設計的朋友進行鞏固訓練 具體功能 include include include include include include include include include include ...

Linux 併發伺服器程式設計(多程序)

在linux中通過流式套接字程式設計 tcp 實現乙個併發伺服器的訪問回顯,適合剛學完linux套接字程式設計的朋友進行鞏固訓練 具體功能 include include include include include include include include include include ...