91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 9KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-14
  • 語言: 其他
  • 標簽: 網絡編程??

資源簡介

Linux 網絡編程——并發服務器的三種實現模型,相關教程如下: http://blog.csdn.net/tennysonsky/article/details/45671215

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?
#include?
#include?

/************************************************************************
函數名稱: void?main(int?argc?char?*argv[])
函數功能: 主函數,用進程建立一個TCP?Echo?Server
函數參數: 無
函數返回: 無
************************************************************************/
int?main(int?argc?char?*argv[])
{
unsigned?short?port?=?8080; //?本地端口

//?創建tcp套接字
int?sockfd?=?socket(AF_INET?SOCK_STREAM?0);???
if(sockfd? {
perror(“socket“);
exit(-1);
}

//?配置本地網絡信息
struct?sockaddr_in?my_addr;
bzero(&my_addr?sizeof(my_addr)); ??//?清空???
my_addr.sin_family?=?AF_INET; ??//?IPv4
my_addr.sin_port???=?htons(port); ??//?端口
my_addr.sin_addr.s_addr?=?htonl(INADDR_ANY);?//?ip

//?綁定
int?err_log?=?bind(sockfd?(struct?sockaddr*)&my_addr?sizeof(my_addr));
if(?err_log?!=?0)
{
perror(“binding“);
close(sockfd);
exit(-1);
}

//?監聽,套接字變被動
err_log?=?listen(sockfd?10);?
if(err_log?!=?0)
{
perror(“listen“);
close(sockfd);
exit(-1);
}

while(1)?//主進程?循環等待客戶端的連接
{

char?cli_ip[INET_ADDRSTRLEN]?=?{0};
struct?sockaddr_in?client_addr;
socklen_t?cliaddr_len?=?sizeof(client_addr);

//?取出客戶端已完成的連接
int?connfd?=?accept(sockfd?(struct?sockaddr*)&client_addr?&cliaddr_len);
if(connfd? {
perror(“accept“);
close(sockfd);
exit(-1);
}

pid_t?pid?=?fork();
if(pid? perror(“fork“);
_exit(-1);
}else?if(0?==?pid){?//子進程?接收客戶端的信息,并發還給客戶端
/*關閉不需要的套接字可節省系統資源,
??同時可避免父子進程共享這些套接字
??可能帶來的不可預計的后果
*/
close(sockfd);???//?關閉監聽套接字,這個套接字是從父進程繼承過來

char?recv_buf[1024]?=?{0};
int?recv_len?=?0;

//?打印客戶端的?ip?和端口
memset(cli_ip?0?sizeof(cli_ip));?//?清空
inet_ntop(AF_INET?&client_addr.sin_addr?cli_ip?INET_ADDRSTRLEN);
printf(“----------------------------------------------\n“);
printf(“client?ip=%sport=%d\n“?cli_ipntohs(client_addr.sin_port));

//?接收數據
while(?(recv_len?=?recv(connfd?recv_buf?sizeof(recv_buf)?0))?>?0?)
{
printf(“recv_buf:?%s\n“?recv_buf);?//?打印數據
send(connfd?recv_buf?recv_len?0);?//?給客戶端回數據
}

printf(“client?closed!\n“);

close(connfd);????//關閉已連接套接字

exit(0);
}else?if(pid?>?0){ //?父進程

close(connfd);????//關閉已連接套接字

}
}

close(sockfd);

????return?0;
}

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2710??2015-05-13?14:56??并發服務器測試代碼\tcp_echo_fork.c
?????文件????????3213??2015-05-13?15:44??并發服務器測試代碼\tcp_echo_pthread.c
?????文件????????3485??2015-05-13?17:10??并發服務器測試代碼\tcp_echo_pthread_pro.c
?????文件????????4311??2015-05-15?14:39??并發服務器測試代碼\tcp_echo_select.c
?????文件????????1976??2015-05-13?12:13??并發服務器測試代碼\tcp_while_recv.c
?????文件????????1739??2015-05-13?12:00??并發服務器測試代碼\udp_while_recv.c
?????目錄???????????0??2015-05-15?14:47??并發服務器測試代碼\

評論

共有 條評論