资源简介
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
- 下一篇:事件触发的多智能体一致性
相关资源
- 中南大学实验:SOCKET通信UDP协议-发送
- Qt实现Winsock网络编程—非阻塞模式下
- 网络编程实验一,客户端和服务器代
- windows网络编程serverandclient猜拳游戏
- 基于CAsyncSocket类的网络编程-客户端
- Windows网络编程第2版-源代码
- linux网络编程源码
- qt TCP网络编程与聊天室的实现
- Socket网络编程进阶与实战慕课网课程
- Socket网络编程进阶与实战视频-百度云
- HTTP网络编程实验
- Qt实现Winsock网络编程—Tcp服务端和
- 陈硕 网络编程实战 视频
- 陈硕视频 网络编程实战
- zeromq-4.0.3.tar
- 一个比较完整的VC 仿QQ聊天源码.rar
- unix network programming(Volume 1 • Thi
- UNIX网络编程卷1(第三版)源代码
- 架构师-深入浅出Netty 书签版
- libevent参考手册(中文版-高清-目录)
- 网络编程实用教程(第三版).zip
- unix网络编程(unp)源代码
- TCP/ IP协议与网络编程 实验报告
- socket网络编程
- linux网络编程
- Linux Netfilter编程源码
- TCP/UDP开发应用
- linux C/S聊天,基于TCP的socket网络编程
- UNIX网络编程(第2卷)-源码
- Qt网络编程
评论
共有 条评论