文件传输C++

File transfer C++

本文关键字:C++ 传输 文件      更新时间:2023-10-16

当我的客户端向服务器发送文件时,我是否应该在发送下一个块之前 Sleep(100) 左右以确保服务器有足够的时间下载 + 写入数据?

这似乎完全没有必要吗?

此外,我在发送块时会收到阻止错误(# 10035),所以我只是循环发送直到成功,如果发送 == SOCKET_ERROR转到 SendAgain; ,可以吗?

如果您通过TCP发送文件,那么它是确保收到所有内容的协议,我不会在每个块之间设置睡眠。

会阻止错误是你为输出缓冲区发送了太多数据,或者你尝试发送得太快,并且远程缓冲区已满。再次发送它似乎可以,因为接收者收到了它,但没有足够的空间来存储它并让它放下它。

这是一篇关于您的错误的小文章:Winsock 错误 10035

在我看来,

使用 sleepfunction 等待某事完成在 99% 的情况下都是错误的方式。您现在永远不会需要或期望执行进程的时间(可能会被例如峰值、I/O 中的其他问题或其他问题中断)

如果你想确保一些重要的东西被完全执行,你应该阅读信号量或类似的东西,你在开始/结束时锁定/释放进程。

取自手册页:

当消息不适合套接字的发送缓冲区时, send() 通常会阻塞,除非套接字已放入 非阻塞 I/O 模式。在非阻塞模式下,它将失败并显示错误 在这种情况下,EAGAIN 或 EWILL block。 select(2) 调用可以是 用于确定何时可以发送更多数据。