求助, C++ 网络编程

zbo_stepping 2014-03-18 04:44:16
被折磨几天了。。。
部分代码:


unsigned long unFileSize = 0;
PLARGE_INTEGER plnFileSize = new LARGE_INTEGER;
GetFileSizeEx(hFile, plnFileSize);
unFileSize = (unsigned long)(plnFileSize->QuadPart);
uint8 *sendDataTemp = new uint8[unFileSize + 1];
unsigned long unRecvSize = 0;
BOOL bRead = ReadFile(hFile, sendDataTemp, unFileSize, &unRecvSize, 0);



WSABUF dataBuf;
dataBuf.len = unFileSize;
dataBuf.buf = (char *)sendDataTemp;
unsigned long nSendSize = 0;
int nRet = WSASend(m_clientSocket, &dataBuf, 1, &nSendSize, 0, NULL, NULL);


接收端是重叠IO模型
发送小文件时 WSAWaitForMultipleEvents能触发并接收到文件,但是发送大文件时 接收端的WSAWaitForMultipleEvents根本没反应, 此时发送端的WSASend返回0, 且其参数nSendSize返回文件大小。。。且发送端已经成功吧文件大小信息发送给接收端了。 help

...全文
237 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰与火 2014-03-19
  • 打赏
  • 举报
回复
我觉得还是ACE库比较方便
titer1 2014-03-19
  • 打赏
  • 举报
回复
如果是网络端可以考虑抓包
titer1 2014-03-19
  • 打赏
  • 举报
回复
文件小可以,大就失败?那么这个文件大小的界限有没有?
zbo_stepping 2014-03-18
  • 打赏
  • 举报
回复
引用 2 楼 truelance 的回复:
多半是接收端代码有问题. 我以前碰到过一个代码, 现象类似. 就是接收端要收到整个文件才返回, 当文件过大时, 对中间报文不响应.
不是这个问题。 当发送小文件时 我在发送分块时断点, 那样接收端肯定只能接受到一块而不是一个文件但是会响应。。。大文件就没反应
zbo_stepping 2014-03-18
  • 打赏
  • 举报
回复
引用 2 楼 truelance 的回复:
多半是接收端代码有问题. 我以前碰到过一个代码, 现象类似. 就是接收端要收到整个文件才返回, 当文件过大时, 对中间报文不响应.
就一个WSAWaitForMultipleEvents。。。然后WSAGetOverlappedResult 再一个回调函数。 公司不让传啊。。。接收端有很多消息封装和解析的
zbo_stepping 2014-03-18
  • 打赏
  • 举报
回复
引用 2 楼 truelance 的回复:
多半是接收端代码有问题. 我以前碰到过一个代码, 现象类似. 就是接收端要收到整个文件才返回, 当文件过大时, 对中间报文不响应.
你是说当底层把文件传送到目标机器上了才会反应么?
__cc__ 2014-03-18
  • 打赏
  • 举报
回复
木有接收端代码,怎么帮你呢
熊熊大叔 2014-03-18
  • 打赏
  • 举报
回复
多半是接收端代码有问题. 我以前碰到过一个代码, 现象类似. 就是接收端要收到整个文件才返回, 当文件过大时, 对中间报文不响应.
zbo_stepping 2014-03-18
  • 打赏
  • 举报
回复
且已经尝试分块发送。。。但还是一样的 小文件行 , 大文件不得行。发送大文件时, WSAWaitForMultipleEvents根本木有反应!!!

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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