资源简介
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 < 0)
{
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 < 0)
{
perror(“accept“);
close(sockfd);
exit(-1);
}
pid_t pid = fork();
if(pid < 0){
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 并发服务器测试代码\
- 上一篇:SyntaxHighlighter 3.0.83
- 下一篇:事件触发的多智能体一致性
相关资源
- Windows异步套接字网络编程
- MFC网络编程实例
- IpHlpApi.h&IpHlpApi.lib
- SOCKET 网络编程 计算机网络 作业 客户
- VC 截获网络数据包.rar
- windows网络编程__罗莉琴__人民邮电出版
- 网络编程实用教程
- 网络编程socket文件图片等传送
- 网络编程实用教程第二版_各章的源程
- unix网络编程英文版第三版pdf
- Linux网络编程-网络基础-socket编程-高并
- UNIX网络编程卷1(第三版 英文版)
- 原始套接字Sniffer程序
- 用socket网页
- 网络编程实用教程(第二版)-源代码
- PiggyXP完成端口(CompletionPort)详解
- 网络调试助手-全平台
- socket网络编程服务端程序支持多客户
- Windows网络编程(第二版)
- UNIX网络编程 卷1(第三版 英文版)
- 网络课程设计购物网站
- Windows网络编程 带书签 第二版.pdf
- 网络编程实用教程.pdf
- socket网络编程,可以实现聊天系统,
- Linux网络编程+RouterOS_3.0中文教程+Rou
- 网络编程实用教程ppt+源码.rar
- TCP/IP高级编程
- UNIX Network Programming Volume 1 Third Editio
- 简单的聊天程序 网络编程 UDP TCP
- Windows网络编程第二版源码(补充材料
评论
共有 条评论