关于完成端口进行SOCKET传送接受文件

马天翼 2012-03-01 07:12:38
我用完成端口进行SOCKET传送接收文件时
传送文件用的就是普通的socket的SEND,不停地从文件中读取并且发包
接受端用的是完成端口,过程也是接收包后就写入文件
遇到下列问题:
1。当我在接收文件时,每接一个包就来个SLEEP(1)时,接受的文件大小和传送的文件大小一样大,但是如果接收时不加SLEEP,那么接受的文件大小最后远大于传送的文件
2。当我收文件时,收到的第一个包总是空的,我想知道GetQueuedCompletionStatus到底什么时候返回,怎么没收到数据就返回了。
3。当我在接收文件时,每接一个包就来个SLEEP(1)时,文件大小虽然没问题,但是当收的文件非常大的时候,文件会很乱。有什么办法解决。
4。另外如果我想实现一发多收和一收多发,应该怎么办?
这个完成端口我弄挺长时间了,自己实在是解决不了了,希望大家帮帮,虽然我没有分,谢谢大家了。
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanshen2891 2012-03-11
  • 打赏
  • 举报
回复
我想知道GetQueuedCompletionStatus到底什么时候返回

-------------------------------------------------

1.套接字上有错误发生
2.对方关闭了连接。
3.你设置的等待时间到了
4.正常完成了一个封包
draracle 2012-03-11
  • 打赏
  • 举报
回复
乱序本身和iocp无关,而是你的线程设计有问题。
哈利路亚1874 2012-03-02
  • 打赏
  • 举报
回复
其实问题的关键不是你发送数据的速度或者是接收的速度,而是你iocp工作线程状态处理不完全,胡乱投递了WSARecv请求导致接收到的数据不正确
ggt87125 2012-03-02
  • 打赏
  • 举报
回复
能否发一下你接受文件的代码看一下吗?最近也在想iocp接收文件这块怎么做。
fishion 2012-03-01
  • 打赏
  • 举报
回复
不需要帮sleep,文件发送一个包,就让接收方在写完数据后返回一个应答包,发送方得到应答包后再发送下一包,这样文件就不会乱了,而且速度也比你用sleep时快。关于第一包是空的,没有遇到过

18,356

社区成员

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

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