Эхо-сервер с конвейером в файл - PullRequest
0 голосов
/ 22 января 2019

У меня есть простой эхо-сервер и клиент, измененный, чтобы просто отправить некоторый текст на сервер. Если я использую

./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 голосов
/ 22 января 2019

Вы можете вызвать сброс, используя fflush, ниже приведен минимальный рабочий пример:

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

int main() {
    for (;;) {
        printf("Hey\n");
        fflush(stdout);
        sleep(1);
    }
    return 0;
}
0 голосов
/ 22 января 2019

Вы можете использовать аргументы командной строки (argv) для получения имени файла и записи полученного текста в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...