有哪些情景可以让CHttpFile::SendRequest出现卡住不返回?

danxuezx 2018-12-07 11:00:51
网上有看到项目中有http的IO操作 使用了WinInet进行网络数据的发送和接收
但是使用中发现 WinInet的读写函数(HttpSendRequest和InternetReadFile)经常会卡住 函数很久才会返回 有时甚至不返回。

我的工程里也用了这套接口,现在想构造一些场景想看到HttpSendRequest或者InternetReadFile不返回。

有哪些场景可能会出现这种情况呢?
...全文
477 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
danxuezx 2018-12-28
  • 打赏
  • 举报
回复
引用 7 楼 蒋晟 的回复:
和服务器无关,这是WinInet本身的限制,按照http 1.1规范,你想创建第三个到服务器的连接的话,要等到第一个服务器的连接关闭才行。

原来如此,终于知道原因了。感恩老大指点!
蒋晟 2018-12-28
  • 打赏
  • 举报
回复
和服务器无关,这是WinInet本身的限制,按照http 1.1规范,你想创建第三个到服务器的连接的话,要等到第一个服务器的连接关闭才行。
danxuezx 2018-12-26
  • 打赏
  • 举报
回复
引用 3 楼 蒋晟 的回复:
默认每服务器连接上限是两个,你同时建三个连接就应该卡住了。
另一个能卡的是改DNS服务器的IP让DNS解析失败。
你列的这两个API是同步模式的,执行过程中会阻塞当前线程,要想不阻塞界面应该用异步模式(InternetReadFileEx之类)或者把把阻塞的代码放到背景线程,

感谢蒋老大指点!默认每服务器连接上限是两个,这个怎么理解呢?是同时有三个客户端连接到服务器上就会卡住吗?这边的服务器是tomcat搭建的。
encoderlee 2018-12-16
  • 打赏
  • 举报
回复
同步API当然会阻塞,尤其是网络不好、延时大、网速慢的时候,要么开一个线程去请求,要么异步API
oyljerry 2018-12-14
  • 打赏
  • 举报
回复

CInternetSession i_Session;
i_Session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 1000);



出现的地方一般是gethostname等这一类网络的地方容易卡住。

可以设置一个超时。避免
蒋晟 2018-12-12
  • 打赏
  • 举报
回复
默认每服务器连接上限是两个,你同时建三个连接就应该卡住了。 另一个能卡的是改DNS服务器的IP让DNS解析失败。 你列的这两个API是同步模式的,执行过程中会阻塞当前线程,要想不阻塞界面应该用异步模式(InternetReadFileEx之类)或者把把阻塞的代码放到背景线程,
danxuezx 2018-12-07
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
杀毒软件 防火墙 的可能性最大

具体怎么配置呢?
zgl7903 2018-12-07
  • 打赏
  • 举报
回复
杀毒软件 防火墙 的可能性最大

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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