读取文件并通过套接字连接发送而不是循环

时间:2015-10-06 02:08:51

标签: c sockets loops logic

我正在尝试打开一个文件,将其读入,然后通过套接字连接逐行发送给等待的客户端。我得到的问题是由于某种原因循环不起作用,它只会在每次触发" 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

回复:4321

LIST

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

1 个答案:

答案 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() ......