我试图打开一个文件,读入它,然后通过套接字连接将它逐行发送到等待的客户端。我遇到的问题是由于某种原因,循环无法正常工作,每次我点击“LIST”命令时,它只会发送文件的第一行。
else if (cmd.compare(list) ==0) /* LIST user input */
{
file_ptr = fopen("file1.txt", "r");
while (fgets(buf, sizeof(buf), file_ptr) != NULL) {
{
while(!feof(file_ptr))
send (new_s, buf, strlen(buf) + 1, 0);
printf("%s",buf);
}
}
fclose(file_ptr);
}
谁能看到我在做什么错?
客户端上“LIST”命令的输出(每次键入LIST都是为了获得这些结果)
列表
回声:马修放克3123214321
列表
回声:3123214321
列表
回声:tthew放克3123214321
列表
回声:23214321
列表
回声:he克3123214321
列表
回声:214321
列表
回声:w放克3123214321
列表
回声:4321
列表
回声:放克3123214321
^ C
在中读取的文件的内容
“file1.txt” 12L,399Cc
马修放克3123214321
1000强尼Applesee7655431234
1001比利·乔尔7312431234
1002比利·偶像123456789
1003让·多伊(Jean Doe)9876543211
1000豌 bean 果冻123456789
1001母亲THreasea987654321
1000彼得和
1000个计算机网络i12341234123
1001计算机网络i12341234123
1002计算机网络i12341234123
1003计算机网络i12341234123
最佳答案
while (fgets(buf, sizeof(buf), file_ptr) != NULL) {
{
while(!feof(file_ptr))
send (new_s, buf, strlen(buf) + 1, 0);
printf("%s",buf);
}
while (!feof(file_ptr))
循环是毫无意义的。您要一遍又一遍地发送相同的内容,直到feof()
出现为止,因为您没有从文件中读取,所以永远不会发送。并且您已经以先前的!= NULL
的形式对EOF进行了测试。我不会为此使用
fgets()
,也不会使用strlen()
。无需对数据进行假设。在这种情况下,您假设它是没有嵌入null的文本。您需要的是:size_t count;
while ((count = fread(buf, 1, sizeof buf, file_ptr)) > 0)
{
send(new_s, buf, count, 0);
}
事实上,我也不会为此使用
stdio
,而不会只使用open()
,read()
和close()
。关于c - 读取文件并通过套接字连接发送而不循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32960627/