社区
C++ 语言
帖子详情
服务器 几秒钟 处理一客户端
wuyanchao
2009-07-22 02:21:13
小弟,刚刚接触网络编程这块,碰到一个问题,服务器的代码 在运行过程有时会出错,原因在于 客户端那边,如果突然出错,服务器的代码 没有执行完 全部的代码 导致出错。
所以 我在想 有没有让服务器在规定时间,比如5秒处理完一个客户端,然后就结束,如果没有处理完,也强制关闭此连接。谢谢了,不胜感激~代码最好用c的
...全文
91
9
打赏
收藏
服务器 几秒钟 处理一客户端
小弟,刚刚接触网络编程这块,碰到一个问题,服务器的代码 在运行过程有时会出错,原因在于 客户端那边,如果突然出错,服务器的代码 没有执行完 全部的代码 导致出错。 所以 我在想 有没有让服务器在规定时间,比如5秒处理完一个客户端,然后就结束,如果没有处理完,也强制关闭此连接。谢谢了,不胜感激~代码最好用c的
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
movaxeffext
2010-06-01
打赏
举报
回复
while(1)
{
int ret;//return select
printf("start\n");
memset(mbuf,0,MB);
new_fd=accept(sock_fd,(struct sockaddr *)&their_addr,&len);
if (new_fd<=0)
{
perror("accept");
continue;
}
printf("accept1\n");
while(1)
{
FD_ZERO(&fdsr);//read
FD_SET(new_fd,&fdsr);
tv.tv_sec=30;
tv.tv_usec=0;
ret=select(new_fd+1, &fdsr, NULL, NULL, &tv);
if (ret== -1)
{
perror("select1");
break;
}
else if (ret== 0)
{
//printf("timeout close\n");
break;
}
else
{
if (FD_ISSET(new_fd,&fdsr))
{
int i=0;
char tem[1000];
memset(tem,0,1000);
len = recv(new_fd,tem , 6, 0);//先收取数据长度
//strcat(mbuf,tem);
//printf("\n接受长度:%s\n",tem);
if (len > 0)
{
char a[10];
memset(a,0,10);
strncpy(a,tem,6);
//printf("a%s\n",a);
int datalen=atoi(a);
printf("datalen:%d\n",datalen);
if(datalen>1000)
{
if((10000<datalen) && (datalen<=80000))
sleep(1);
else if(datalen<=120000)
sleep(2);
else
sleep(3);
int f1=0,f2=0,f3=0;
for(i=0;i<datalen-1000;i=i+1000)
{
memset(tem,0,1000);
recv(new_fd,tem,1000,0);
strncat(mbuf,tem,strlen(tem));
if(strlen(mbuf)>=25000&&f1==0)
{sleep(3);f1=1;}
if(strlen(mbuf)>=50000&&f2==0)
{sleep(2);f2=1;}
if(strlen(mbuf)>=75000&&f3==0)
{sleep(2);f3=1;}
if(strlen(mbuf)>=100000&&f3==0)
{sleep(2);f3=1;}
//printf("tem:%slen:%d\n",tem,strlen(tem));
}
}
memset(tem,0,1000);
//printf("剩下:%d\n",datalen-i);
recv(new_fd,tem,datalen-i,0);
printf("last content:%slast len:%d\n",tem,strlen(tem));
strncat(mbuf,tem,strlen(tem));
//printf("111接收消息成功,共%d个字节的数据\n",strlen(mbuf));
if(Analyze_Header(mbuf)>=0)
{
printf("Succeed\n");
break;
}
else
{
printf("Fail\n");
break;
}
}
else {
if (len < 0)
printf
("消息接收失败!错误代码是%d,错误信息是'%s'\n",
errno, strerror(errno));
else
printf("对方退出了,终止\n");
break;
}
}
}
}
memset(mbuf,0,MB);
close(new_fd); //clear
FD_CLR(new_fd, &fdsr);
}
}
gunsand
2009-07-22
打赏
举报
回复
5秒太JB慢了。 处理数据至少要毫秒级的。 否则用户多了怎么办。
5秒后自动切断连接当然可以的。 我有比较好的SERVER架构代码 。你要是有兴趣发站内消息给我。
iambic
2009-07-22
打赏
举报
回复
你这属于逃避问题,结果只会制造更多的问题。找本好点的书好好看看吧。
emyueguang
2009-07-22
打赏
举报
回复
Sleep(5000); //休息5秒
closesocket(s); //断开链接
emyueguang
2009-07-22
打赏
举报
回复
在C中关闭一个SOCKET用closesocket函数
int closesocket(SOCKET s);
--说明
closesocket函数用来关闭一个描述符为s套接字。由于每个进程中都有一个套接字描述符表,表中的每个套接字描述符都对应了一个位于操作系统缓冲区中的套接字数据结构,因此有可能有几个套接字描述符指向同一个套接字数据结构。套接字数据结构中专门有一个字段存放该结构的被引用次数,即有多少个套接字描述符指向该结构。当调用closesocket函数时,操作系统先检查套接字数据结构中的该字段的值,如果为1,就表明只有一个套接字描述符指向它,因此操作系统就先把s在套接字描述符表中对应的那条表项清除,并且释放s对应的套接字数据结构;如果该字段大于1,那么操作系统仅仅清除s在套接字描述符表中的对应表项,并且把s对应的套接字数据结构的引用次数减1。
closesocket函数如果执行成功就返回0,否则返回SOCKET_ERROR
wuyanchao
2009-07-22
打赏
举报
回复
[Quote=引用 3 楼 crst_zh 的回复:]
你先看看TCP/IP断开的过程(四次握手)。
[/Quote]
怎么说? 5m后,直接 断开 怎么写代码
crst_zh
2009-07-22
打赏
举报
回复
你先看看TCP/IP断开的过程(四次握手)。
wuyanchao
2009-07-22
打赏
举报
回复
[Quote=引用 1 楼 crst_zh 的回复:]
应该是从容关闭的问题吧。
这样的话你可以考虑使用UDP方式可能更高,由高层来保证可靠性
[/Quote]
怎么从容关闭? 怎么检测?
crst_zh
2009-07-22
打赏
举报
回复
应该是从容关闭的问题吧。
这样的话你可以考虑使用UDP方式可能更高,由高层来保证可靠性
WCF 双工通信 脱机检测、自动重连、心跳包 演示代码
WCF 双工通信 脱机检测、自动重连、心跳包 演示代码 通过
客户端
定时给
服务器
心跳包检测在线。 用户登录后,
服务器
定期发送数据到客户。
服务器
脱机后
客户端
自动检测并自动登录。 服务端监控
客户端
是否离线,心跳包出场,
客户端
每5秒钟想
服务器
回发一次,若
服务器
监控到某个
客户端
的最后更新时间比现在大5秒则做离线
处理
,移除
客户端
。 具体实现是,当
客户端
注册到
服务器
时,
服务器
将
客户端
添加到一个字典中,这个字典中保存有
客户端
名称和添加时间,以后由
客户端
定时心跳来更新
服务器
上的这个字典集合,在服务中会有一个定时器,500毫秒一次去检测这个集合,如果发现有大于5秒钟还未更新的
客户端
,则从回调句柄集合中移除,由此避免句柄的调用异常问题。
客户端
定时调用update进行更新。
网站
服务器
如何
处理
客户端
请求,
服务器
如何
处理
来自多个
客户端
的Web服务请求...
它用于一般概念,而不是Android特定的通常,每个用户都会发送该页面的HTTP请求。
服务器
接收请求并将它们委托给不同的工作者(进程或线程)。根据给定的URL,
服务器
会读取文件并将其发送回用户。如果文件是动态文件(如PHP文件),则在将文件发送回用户之前执行该文件。一旦发回请求的文件,
服务器
通常会在
几秒钟
后关闭连接。修改强>对于HTTP使用TCP,这是一种基于连接的协议。也就是说,
客户端
在与...
时间
服务器
: NTP
服务器
及
客户端
搭建
时间
服务器
: NTP
服务器
及
客户端
搭建 一. NTP
服务器
的安装与设定 1. NTP
服务器
的安装与设定前言 2. 所需软件与软件结构 3. 主要配置文件 ntp.conf 的
处理
4. NTP 的启动与观察: ntpstat, ntpq 5. 安全性设定 1.NTP
服务器
的安装与设定前言 NTP
服务器
很容易就可以架设成功,不过这个软件在不同的 ...
快速多人游戏(2) -
客户端
预测和
服务器
校验
在第一篇文章中,我们介绍了一种权威
服务器
的C-S模型,在这种模型中,
客户端
只将输入发送到
服务器
中,当收到来自
服务器
的游戏状态更新的时候再将结果渲染出来。 单纯地依赖这种模型会导致玩家输入命令和画面更新之间的延迟感,比如,当玩家按下向右的按钮,然后玩家等了半秒钟才开始移动,因为首先
客户端
需要把输入传给
服务器
,然后
服务器
处理
了出入之后计算出新的游戏状态,然后再将新的游戏状态传回给
客户端
。
libevent TCP
服务器
主动发送消息给
客户端
最近要做一个关于libevent性能测试的任务,在琢磨如何在TCP
服务器
上主动发送消息给
客户端
的时候弄了很久。写篇博客记录一下。 网上的例子大多都是,先建立一个监听回调,监听到之后新建一个bufferevent,然后在bufferevent上建立读写回调,在读回调中对消息进行显示(或者其它
处理
),然后调用bufferevent_write函数,发送回复信息。 这样的做法,一个非常致命的缺点是,...
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章