文件传输C++
File transfer C++
当我的客户端向服务器发送文件时,我是否应该在发送下一个块之前 Sleep(100) 左右以确保服务器有足够的时间下载 + 写入数据?
这似乎完全没有必要吗?
此外,我在发送块时会收到阻止错误(# 10035),所以我只是循环发送直到成功,如果发送 == SOCKET_ERROR转到 SendAgain; ,可以吗?
如果您通过TCP发送文件,那么它是确保收到所有内容的协议,我不会在每个块之间设置睡眠。
会阻止错误是你为输出缓冲区发送了太多数据,或者你尝试发送得太快,并且远程缓冲区已满。再次发送它似乎可以,因为接收者收到了它,但没有足够的空间来存储它并让它放下它。
这是一篇关于您的错误的小文章:Winsock 错误 10035
在我看来,
使用 sleepfunction 等待某事完成在 99% 的情况下都是错误的方式。您现在永远不会需要或期望执行进程的时间(可能会被例如峰值、I/O 中的其他问题或其他问题中断)
如果你想确保一些重要的东西被完全执行,你应该阅读信号量或类似的东西,你在开始/结束时锁定/释放进程。
取自手册页:
当消息不适合套接字的发送缓冲区时, send() 通常会阻塞,除非套接字已放入 非阻塞 I/O 模式。在非阻塞模式下,它将失败并显示错误 在这种情况下,EAGAIN 或 EWILL block。 select(2) 调用可以是 用于确定何时可以发送更多数据。
相关文章:
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- Angelscript从C++传输数组
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 从服务器传输到客户端的消息不会出现
- USB传输的LibUSB C++格式不同
- 在本地网络中通过OpenCV(C++)实时流式传输图像
- 将相机数据从服务器实时流式传输到客户端
- 加密在 Windows、C++ 和 Java 中传输中的数据
- 如何从网站获取数据并将其传输到数据库?
- 使用蓝牙组件将数据从Android手机传输到串行设备时出现问题
- 在 OpenCV 中应用公式并传输图像
- 在不传输的情况下更改 Win32 中的串行端口波特率
- Vulkan 的传输队列系列功能和显卡支持:条件检查是否准确?
- 如何使用CAPL的诊断功能获取CAN传输的数据(256字节)?
- 如何通过ROS将realsense数据传输到其他设备
- 将音频从浏览器流式传输到WebRTC本机C++应用程序
- 将FFMpeg AVFrame对象从C++应用程序流式传输到Python的最佳方法?
- 使用IMFSourceReader(Microsoft媒体基金会)进行音频流传输
- 在PROGMEM中添加更多数据会中断Arduino Mega 2560上的SPI传输
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据