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

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

最后就直接死锁

处理流程没有处理好。
马天翼 2012-03-02
  • 打赏
  • 举报
回复
现在上面的问题解决了,但是接收文件的速度超级慢,发送方使劲发,一下都发没了,接收发的完成端口开始还挺快,但到后面是越来越慢。。如果文件特别大,最后就直接死锁了。。
e3internet 2012-03-01
  • 打赏
  • 举报
回复
不需要延时,你的完成端口设计一定有缺陷.记得分包接受数据。那个包是通过那次发送得到的,一条处理完成才处理下一个包。

64,691

社区成员

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

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