我有一个简单的回显服务器,并且将客户端更改为只向服务器发送一些文本。如果我使用
./client.o port < file.in
它可以工作并将文件内容发送到服务器,但是如果我尝试
./server.o port > file.out
启动服务器时,它不会执行任何操作,既不会打印到终端,也不会打印到文件。我希望能够在启动服务器进程时将接收到的文本写入文件(如果已指定)。这是服务器代码的接收循环:
for(;;) {
int done, n;
printf("Waiting for a connection...\n");
t = sizeof(remote);
if ((s2 = accept(s, (struct sockaddr *) &remote, (socklen_t *) &t)) == -1) {
perror("accept");
exit(1);
}
printf("Connected.\n");
done = 0;
do {
n = recv(s2, str, 100, 0);
if (n <= 0) {
if (n < 0) perror("recv");
done = 1;
}
if (!done)
printf("%s\n", str);
} while (!done);
我该怎么办?
答案 0 :(得分:2)
您可以使用fflush
强制刷新,以下是一个最小的工作示例:
#include <stdio.h>
#include <unistd.h>
int main() {
for (;;) {
printf("Hey\n");
fflush(stdout);
sleep(1);
}
return 0;
}
答案 1 :(得分:-1)
您可以使用命令行参数(argv)接收文件名并将接收到的文本写入文件。