Программа-оболочка Netcat

Мне нужно, для курса, запрограммировать простой сервер, который отвечает "До свидания", когда мы говорим ему "Привет". Я пытался сделать это с помощью netcat, но как мне сделать скрипт, который слушает клиента, проверяет его ответ, а затем печатает «До свидания»? Я пытался сделать:

netcat -l -p 8080 -e bye

с bye.c :

int main(int argc, char ** argl){
    char res[100] ;
    while(1){
        fgets(res, 100, stdin) ;
        if(!strcasecmp(res, "Hello"))
            {printf("Goodbye\n") ; return 0 ; } }

}

но, похоже, это не работает. Вы можете помочь мне ?


person Nathos8    schedule 15.03.2018    source источник
comment
Как насчет того, чтобы сначала напечатать до свидания то, что он получает на стандартный ввод? Может быть передана новая строка ("Hello\n"), которая приводит к сбою strcasecmp.   -  person Jens    schedule 15.03.2018
comment
Если вы уже программируете на C, я думаю, что ответ здесь очевиден, и в сети есть много примеров кода, которые вы могли бы использовать для простого сервера и клиента tcp. Однако я чувствую, что мы упускаем важную часть вопроса; например, почему вам нужно поступать именно так и какую проблему вы пытаетесь решить. Я мог бы опубликовать код здесь, но я бы только гуглил его вместо вас. Возможно, эта тема поможет вам начать. stackoverflow.com/questions/662328/   -  person Josiah DeWitt    schedule 15.03.2018
comment
... не работает? Обратите внимание, что наши рекомендации требуют, чтобы вопрос включал конкретную проблему или ошибку и кратчайший код, необходимый для ее воспроизведения. (В идеале вы должны определить, нужна ли вам помощь с частью bash или частью C, до того, как вы зададите вопрос, и включите только один).   -  person Charles Duffy    schedule 15.03.2018


Ответы (1)


Просто замените strcasecmp на strncmp(res, "Hello", 5), и все должно работать.

Однако вы должны избегать блокировки fgets: «Он останавливается, когда читаются (n-1) символы, читается символ новой строки или достигается конец файла, в зависимости от того, что наступит раньше».

person Werner    schedule 15.03.2018
comment
Спасибо, ребята, это была новая строка, я просто забыл, что fgets ее тоже копирует! - person Nathos8; 17.03.2018