读取文件并通过不循环的套接字连接发送
Read file and send across a socket connection not looping
我正在尝试打开一个文件,将其读入,然后通过套接字连接将其逐行发送到等待的客户端。我遇到的问题是由于某种原因循环不起作用,每次我触发 "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以获得这些结果)
列表
ECHO:马修放克 3123214321
列表
ECHO:3123214321
列表
ECHO:tthew funk 3123214321
列表
ECHO:23214321
列表
ECHO:hew funk 3123214321
列表
ECHO:214321
列表
ECHO:w funk 3123214321
列表
ECHO:4321
列表
ECHO:放克 3123214321
^C
正在读入的文件内容
"file1.txt" 12L, 399CC
马修·芬克 3123214321
1000 强尼 Applesee7655431234
1001比利乔尔 7312431234
1002比利偶像 123456789
1003无名氏 9876543211
1000 peauntbuJelly 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()
。无需对数据做出假设。在这种情况下,您假设它是没有嵌入空值的文本。你只需要这个:
size_t count;
while ((count = fread(buf, 1, sizeof buf, file_ptr)) > 0)
{
send(new_s, buf, count, 0);
}
事实上,我也不会为此使用 stdio
,只是 open()
、read()
和 close()
...
我正在尝试打开一个文件,将其读入,然后通过套接字连接将其逐行发送到等待的客户端。我遇到的问题是由于某种原因循环不起作用,每次我触发 "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以获得这些结果)
列表
ECHO:马修放克 3123214321
列表
ECHO:3123214321
列表
ECHO:tthew funk 3123214321
列表
ECHO:23214321
列表
ECHO:hew funk 3123214321
列表
ECHO:214321
列表
ECHO:w funk 3123214321
列表
ECHO:4321
列表
ECHO:放克 3123214321
^C
正在读入的文件内容
"file1.txt" 12L, 399CC
马修·芬克 3123214321
1000 强尼 Applesee7655431234
1001比利乔尔 7312431234
1002比利偶像 123456789
1003无名氏 9876543211
1000 peauntbuJelly 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
.
我不会为此使用 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()
...