【发布时间】:2022-02-08 15:26:35
【问题描述】:
你好 stackflow 用户,
所以我想在 c++ 中使用套接字发送和接收我的二进制文件,这是我从服务器程序发送它的方式
send(Connections[conindex], reinterpret_cast<char*>(rawData), sizeof(rawData), NULL);
这是我的客户端程序接收它的方式
char raw[647680];
recv(Connection, raw, sizeof(raw), NULL);
还有比这更合适的方法吗?我想要这样我就不必每次都硬编码大小。 或任何其他替代品等
【问题讨论】:
-
首先确保你在两边都以二进制模式打开文件。其次总是检查
send和recv返回什么。第三,切勿使用字符串函数(如strlen)来处理二进制数据。第四,如果您使用 TCP,请记住它是一个没有数据包边界的 streaming 协议,并且对recv的单个调用可能会收到 less 而不是在单个调用中传递给send,所以你总是需要循环调用recv。 -
最后,套接字和内核中的大多数内部缓冲区通常都不足以容纳整个大文件。在您的应用程序中使用较小的缓冲区,读取文件并逐个发送块,并且如上所述使用循环来接收和写入数据。
-
好吧,我试试,谢谢!
-
@Someprogrammerdude 为什么以及如何检查 send 和 recv 的返回值?