gpt4 book ai didi

c++通过1个数据包中的套接字发送大数据

转载 作者:行者123 更新时间:2023-11-30 00:53:25 26 4
gpt4 key购买 nike

有没有办法引导操作系统(WIN7)发送大数据(3MB 等),在 1 个数据包中使用 C++ 套接字?

我的意思是使用“发送”功能发送数据,而不将数据分离到很多数据包中:

iResult = send( ConnectSocket, &vect[0], vect.size(), 0 ); // Sending The File

(我试图通过套接字发送大小为 3MB 的 png 文件)。谢谢。

最佳答案

鉴于IP数据包的长度字段是2个字节,不。您的流将被分成最多 65k 的数据包。但由于 TCP 是一种流协议(protocol),因此如何格式化和发送数据包取决于实现。您只能保证按照发送顺序收到发送的数据。

如果您想知道发送数据的结尾在哪里,请考虑先发送数据大小,然后再读取该数据量。

unsigned int len = vect.size();
iResult = send( ConnectSocket, &len, sizeof(len), 0 ); // Sending The Length
iResult = send( ConnectSocket, &vect[0], vect.size(), 0 ); // Sending The File

然后在接收端:

unsigned int len;
iResult = recv(socket, &len, sizeof(len), 0);
// now you know how much data to read to get your png

另请注意,您应该检查每次调用 send 时发送了多少,因为它不必在一次调用中发送整个缓冲区。与 recv 相同。您可能需要多次调用 recv 才能读取整个发送的数据。

关于c++通过1个数据包中的套接字发送大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16483598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com