如何将文本文件中的全文接收到c语言的服务器中?

如何将文本文件中的全文接收到c语言的服务器中?,c,ftp,C,Ftp,我试图用文本文件实现STOR命令。在服务器中,我有将文件作为字符串接收到接收缓冲区的代码。有没有一种方法可以将整个字符串接收到缓冲区中 while (true) { if (active == 0) { bytes = recv(ns_data, receive_buffer, strlen(receive_buffer), 0);

我试图用文本文件实现STOR命令。在服务器中,我有将文件作为字符串接收到接收缓冲区的代码。有没有一种方法可以将整个字符串接收到缓冲区中

            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的文本文件和“this is a word”侧的示例文本,recv函数一次仅获取4个字符。所以在第一个循环中,它会得到“this”,在第二个循环中,它会得到“is”,等等。如何将整个字符串放入接收缓冲区,并在其读取的文件中没有更多文本时终止它?

recv
您使用它的方式将一直读取,直到套接字缓冲区中没有更多数据或您的接收缓冲区已满,从而导致您看到的行为。除非将该文件构建到协议中,否则无法知道文件何时完成接收


如果文件仅为文本,则可以使用0字节(
\0
)终止消息,并反复调用
recv
,直到看到该消息到达(因为
\0
不会出现在任何文本文件中)。或者,您可以在所有传输之前使用一个指示长度的特殊标题。如果你不十分小心,这两种方法都是不安全的。

为什么你一次只能得到4个?如果您的接收缓冲区只有4字节长,我建议将其加长。
receive\u buffer
当您使用
strlen
测量其长度时,缓冲区中有什么内容?您应该发布您正在使用的所有变量的声明。它的长度是44。@ryanthonpson
strlen
不会告诉您缓冲区的大小,它告诉您缓冲区内字符串的长度。它基本上对字符进行计数,直到找到空终止符(零值字符)。