C套接字:处理可变长度的数据包

时间:2015-11-08 16:31:46

标签: c linux sockets

我正在开发一个简单的客户端/服务器应用程序(你可以想到一个类似ftp的程序)。

连接到服务器后,客户端会发送如下消息:

GET filename

文件名长度当然可以变化。我怎样才能确保创建一个足以存储文件名字符串的变量?

char buffer[512];
recv(buffer, sizeof(buffer), 0);

1 个答案:

答案 0 :(得分:2)

你可以说文件名长度永远不会超过一些数字,即128.然后只需声明具有该长度的数组。

否则首先发送文件名的长度,然后发送文件名。由于文件名的长度是整数,因此它的长度是固定的,因此您知道前两个字节表示文件名的长度(mind enianness)。之后,当您读取文件名长度时,可以使用malloc为文件名分配足够的空间。

这看起来很奇怪

sizeof(buffer-1)

buffer衰减到数组的第一个元素的指针,我怀疑你想从中减去一个。

注意:recv可能会收到的字节数少于请求的数量,因此您可能需要循环(并解析),直到收到必要的字节数。