带管道到文件的Echo服务器

时间:2019-01-22 03:59:40

标签: c linux

我有一个简单的回显服务器,并且将客户端更改为只向服务器发送一些文本。如果我使用

./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);

我该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以使用fflush强制刷新,以下是一个最小的工作示例:

#include <stdio.h>
#include <unistd.h>

int main() {
    for (;;) {
        printf("Hey\n");
        fflush(stdout);
        sleep(1);
    }
    return 0;
}

答案 1 :(得分:-1)

您可以使用命令行参数(argv)接收文件名并将接收到的文本写入文件。