端口复用服务器模型
来源:互联网 发布:淘宝发短信的店铺链接 编辑:程序博客网 时间:2024/06/05 07:54
// I/O复用服务器模型
//select编程
/***********************************
**** 版本:
**** 编写
**** 修改
***********************************/
程序流程
#include <sys/select.h>
/* According to earlier standards */
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/socket.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <linux/in.h>
#include <strings.h>
#define N 80
int main(void)
{
int sokfid=0;
int i;
fd_set readfds;
fd_set readfdstemp;
int listenfd;
int clienfd;
int select_nu;
char buf[100];
struct sockaddr_in sever_in;
struct sockaddr_in clien_in;
int iaddrlen=sizeof(sever_in);
/******设置服务的socket sever_in *******/
bzero(&sever_in,sizeof(sever_in));
sever_in.sin_family=AF_INET;
sever_in.sin_port=htons(9000);
sever_in.sin_addr.s_addr=inet_addr("192.168.1.100");
/*****创建套接字***********************/
if((sokfid=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("creat sockt");
exit(-1);
}
/*****绑定套接字***********************/
if(bind(sokfid,(struct sockaddr*)&sever_in,sizeof(sever_in))<0)
{
perror("bind:");
exit(-1);
}
/*****建立监听队列***********************/
listen(sokfid,5);
/*****初始化读select集合****************/
FD_ZERO(&readfds);
/*****把套接字放入监控集合中*************/
FD_SET(sokfid,&readfds);
/**********扫描上限设置**************************** /
select_nu=sokfid+1;
while(1)
{
FD_SET(sokfid,&readfds);
/*********设置临时监听集合**********************/
readfdstemp=readfds;
/*********启用select扫描集合中的就绪项**********/
/**************************************************
*** select 为阻塞函数
*** select 把就绪项标志设为1,把非就绪项标志清零
*** 利用临时的 集合readfdstemp很有必要
****************************************************/
if(select(select_nu,&readfdstemp,NULL,NULL,NULL)>0)
{
}
for(i=0;i<select_nu;i++)
{
if(FD_ISSET(i,&readfdstemp))
{
/********如果就绪队列socket链接活动那么就启动链接*************/
if(i==sokfid)
{
clienfd=accept(sokfid,(struct sockaddr*)&clien_in,&iaddrlen);
FD_SET(clienfd,&readfds);
select_nu=clienfd+1;
printf("%d\n",clienfd);
}
/***********如果服务器端的接受到客户端的信息就原样返回***********/
else
{
int n;
bzero(buf, sizeof(buf));
n = recv(i, buf, N, 0);
if (n == 0)
{
FD_CLR(i,&readfds);
select_nu--;
close(i);
break;
}
buf[n] = 0;
printf("n = %d: %s\n", n, buf);
send(i, buf, n, 0);
printf("the end....\n");
}
}
}
}
}
- 端口复用服务器模型
- 端口复用服务器模型
- 完成端口服务器模型
- winsock 完成端口 简单服务器模型
- winsock 完成端口 服务器模型(1)
- winsock 完成端口 服务器模型(2)
- winsock 完成端口 服务器模型(3)
- 完成端口模型服务器客户端基础WSACompletionPortServer
- 用C++实现HTTP服务器 - 处理完成端口模型(IOCP)的超时问题
- 用C++实现HTTP服务器 - 处理完成端口模型(IOCP)的超时问题
- 用C++实现HTTP服务器 - 处理完成端口模型(IOCP)的超时问题
- 用C++实现HTTP服务器 - 处理完成端口模型(IOCP)的超时问题
- 可伸缩的IO完成端口服务器模型
- 可伸缩的IO完成端口服务器模型(IOCP)
- 可伸缩的IO完成端口服务器模型(IOCP)(中文版)
- 服务器编程模型 循环服务器->IO复用循环服务器 并发服务器->高性能并发服务器
- 服务器I/O复用模型实现
- 12 IO复用服务器模型
- lenovo v480c(无线网卡型号:Intel 2230 BGN) backtrack linux下实现无线上网
- 在HTML中利用js调用php的内容
- S60Webkit 五版本编译成功 运行报KERN-EXEC 3错误
- Eclipse启动优化
- java线程池。
- 端口复用服务器模型
- Android支持横行滚动的ListView控件
- 利用js调用后台php进行数据处理原码
- wifi模块:marvell-8686
- hibernate在不联网时不能解析配置文件解决方案
- 36计教您如何提高PHP代码质量
- DOS命令应用之分离路径和文件名
- 如何实现一个Firewall-Hook驱动
- 视觉中国的NoSQL之路-从mysql迁移到Mongodb