我尝试用文本文件实现STOR命令。在服务器中,我有代码将文件作为字符串接收到receive_buffer中。有没有办法可以将字符串作为整个字符串接收到缓冲区中?
while (true)
{
if (active == 0)
{
bytes = recv(ns_data, receive_buffer, strlen(receive_buffer), 0);
}
else
{
recv(s_data_act, receive_buffer, strlen(receive_buffer), 0);
printf("len: %d\n", strlen(receive_buffer));
printf("receive_buffer: %s\n", receive_buffer);
}
printf("Receive_buffer: %s\n", receive_buffer);
strcpy(temp_buffer, receive_buffer);
printf("temp_buffer: %s\n", temp_buffer);
fputs(temp_buffer2, f);
此刻,例如,有一个名为text.txt的文本文件和“这是一个单词”的示例文本,recv函数一次只能获得4个字符。因此,在第一个循环中,它将获得“this”,在第二个循环上它将获得“is”,依此类推。如何将整个字符串放入接收缓冲区并在文件中没有其正在读取的文本时终止它?
答案 0 :(得分:0)
recv
您使用它的方式将会读取,直到套接字缓冲区中没有更多数据或接收缓冲区已满,从而导致您看到的行为。除非您将文件构建到协议中,否则无法知道文件何时完成。
如果文件只是文本,您可以使用0字节(\0
)终止消息并重复调用recv
,直到看到该消息到达(因为\0
将不在任何文本文件)。或者您可以使用指示长度的特殊标头添加所有传输。如果你不是很小心的话,这两种方式都是不安全的。