链接服务器 造成程序卡顿 问题

rest1234 2014-07-04 05:27:16



程序 用一个10秒间隔的定时器 判断 是否连接上 服务器 如果没有就调用这段代码

奇怪的是在 服务器关闭或者断网的情况下 程序就会特别卡 半天才能响应命令

是那块出了问题呢?
...全文
248 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
甜思思 2014-07-08
  • 打赏
  • 举报
回复
这个是不是必须得开 线程来搞定
rest1234 2014-07-07
  • 打赏
  • 举报
回复
这个卡顿 只针对 主机关机的时候
rest1234 2014-07-07
  • 打赏
  • 举报
回复
引用 10 楼 mayudong1 的回复:
会耗时的操作起一个工作线程来做,就不会卡住界面 你的定时器大概就是windows的timer了,它的执行时在界面线程中执行的
是 vc 手写的 settimer
mayudong1 2014-07-07
  • 打赏
  • 举报
回复
会耗时的操作起一个工作线程来做,就不会卡住界面 你的定时器大概就是windows的timer了,它的执行时在界面线程中执行的
rest1234 2014-07-07
  • 打赏
  • 举报
回复
引用 8 楼 fang098 的回复:
[quote=引用 7 楼 rest1234 的回复:]
这个卡顿 只针对 主机关机的时候

楼主你的SOCKET是阻塞模式吧,
//设置为非阻塞模式
1
unsigned long nBlock := 1;
ioctlsocket(hSock,FIONBIO,nBlock);

2
int nTimeOut := 2000;
//设置发送数据通信超时
setsockopt(hSock,SOL_SOCKET,SO_SNDTIMEO,@nTimeOut,SizeOf(Integer));

3
connect
4
select,在select中判断是否连接成功,成功后再设置成阻塞,这就和你其它的处理一样了。[/quote]

你看我改成这样 代码那块出问题了 还是卡

fang 2014-07-07
  • 打赏
  • 举报
回复
引用 7 楼 rest1234 的回复:
这个卡顿 只针对 主机关机的时候
楼主你的SOCKET是阻塞模式吧, //设置为非阻塞模式 1 unsigned long nBlock := 1; ioctlsocket(hSock,FIONBIO,nBlock); 2 int nTimeOut := 2000; //设置发送数据通信超时 setsockopt(hSock,SOL_SOCKET,SO_SNDTIMEO,@nTimeOut,SizeOf(Integer)); 3 connect 4 select,在select中判断是否连接成功,成功后再设置成阻塞,这就和你其它的处理一样了。
Eleven 2014-07-04
  • 打赏
  • 举报
回复
用select函数,设置connect连接超时
版主大哥 2014-07-04
  • 打赏
  • 举报
回复
引用 2 楼 shenyi0106 的回复:
在扩展一下: 在你的这个实例中,你的数据包格式是这样的(由下到上的层次是): 以太网协议-》IP协议-》TCP协议-》你的数据 以太网协议的源地址和目的地址是你网卡的MAC地址和接收端网卡的MAC地址(这是二层交换网络所必须的,否则无法通过交换网络到达你的主机)。 IP协议你应该比较数据,它的源地址和目的地址是你的ip地址和接收端的ip地址(这是三层网络所需要的,它用于路由网络) TCP协议是传输层协议,它数据主机特定协议,TCP协议中的端口标示了具体的主机应用。里面的源端口标示了你主机的应用,目的端口标示了接收主机的应用。 基本上原理就是这样了,时间有限,要不然画一张图就更清楚了
借宝地 问问1楼 在socket设置异步时,connect调用就不会卡啊?
版主大哥 2014-07-04
  • 打赏
  • 举报
回复
connect导致顿卡的
oyljerry 2014-07-04
  • 打赏
  • 举报
回复
有一个连接超时等。
shenyi0106 2014-07-04
  • 打赏
  • 举报
回复
在扩展一下: 在你的这个实例中,你的数据包格式是这样的(由下到上的层次是): 以太网协议-》IP协议-》TCP协议-》你的数据 以太网协议的源地址和目的地址是你网卡的MAC地址和接收端网卡的MAC地址(这是二层交换网络所必须的,否则无法通过交换网络到达你的主机)。 IP协议你应该比较数据,它的源地址和目的地址是你的ip地址和接收端的ip地址(这是三层网络所需要的,它用于路由网络) TCP协议是传输层协议,它数据主机特定协议,TCP协议中的端口标示了具体的主机应用。里面的源端口标示了你主机的应用,目的端口标示了接收主机的应用。 基本上原理就是这样了,时间有限,要不然画一张图就更清楚了
shenyi0106 2014-07-04
  • 打赏
  • 举报
回复
因为在连接前,需要先找到对方的MAC地址(请去看一下什么是以太网协议),这里需要ARP(当然这是网络驱动层做的事情,你根本不知道它的发生),它会发送几轮ARP Request,请求你要连接主机的MAC地址。如果对方主机不存在,那么它会循环发送几轮,直到超时,所以很慢。 如果对方存在,那么剩下的就是传输层(TCP)的事情了,所以会很快。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧