我正在尝试打开一个文件,将其读入,然后通过套接字连接逐行发送给等待的客户端。我得到的问题是由于某种原因循环不起作用,它只会在每次触发" 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以获得这些结果)
LIST
ECHO:matthew funk 3123214321
LIST
ECHO:3123214321
LIST
ECHO:tthew funk 3123214321
LIST
ECHO:23214321
LIST
ECHO:hew funk 3123214321
LIST
ECHO:214321
LIST
ECHO:w funk 3123214321
LIST
回复:4321LIST
ECHO:funk 3123214321
^ C
正在阅读的文件内容
" FILE1.TXT" 12L,399Cc
matthew funk 3123214321
1000Jonny Applesee7655431234
1001Billy Joel 7312431234
1002Billy Idol 123456789
1003Jean Doe 9876543211
1000 peauntbuJelly 123456789
1001母亲THreasea987654321
1000 peter paul和
1000 COmputernetworki12341234123
1001 COmputernetworki12341234123
1002 COmputernetworki12341234123
1003 COmputernetworki12341234123
答案 0 :(得分:1)
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()
。没有必要对数据做出假设。在这种情况下,您假设它的文本没有嵌入的空值。所有你需要的是:
size_t count;
while ((count = fread(buf, 1, sizeof buf, file_ptr)) > 0)
{
send(new_s, buf, count, 0);
}
事实上,我也不会stdio
使用open()
,read()
和close()
......