Спасибо за ответ @wally и комментарий @Stom. Оба позволили мне понять, как работает эта функциональность, и поэтому я смог решить свою проблему. Я столкнулся с слишком большой проблемой, позволяющей моему приложению поддерживать связь с микроконтроллером. Поэтому сейчас я предпочитаю только отправить сообщение и прекратить netcat.
Когда я запускаю приведенный ниже код, я могу отправить только одно сообщение, и мне нужно перезапустить приложение вручную. Но это помогло найти решение.
fp = popen("nc 192.168.4.1 555", "w");
if (fp == NULL) {
/* Handle error */
printf("Couldn't spawn nc\n");
exit(1);
}
fprintf(fp, "key"); // write to netcat's STDIN
pclose(fp);
Код ниже вызывается, когда я нажимаю кнопку «Открыть дверь».
FILE *fp;
int ch;
char txt[20];
int value;
char comando[] = "";
int len=0;
fp = fopen("text.txt", "r");
if(fp){
do{
ch=fgetc(fp);
txt[len]=ch;
len++;
}while(ch !=EOF && ch != '\n');
fclose(fp);
}
value = atoi(txt);
sprintf(comando, "echo %d | timeout 3 nc 192.168.4.1 555",value);
system(comando);
Файл с паролем открывается, содержимое сохраняется в переменной и отправляется с помощью netcat.
Добавление netcat "timeout 3" ждет 3 секунды перед закрытием соединения. Это позволяет мне снова нажать кнопку и закрыть или открыть дверь, сколько я хочу.
echo %d | timeout 3 nc 192.168.4.1 555
Мне нужно было скопировать содержимое «char txt» в «int value», потому что на терминале вместо записи номера пароля записывалось «cho cho».