У меня есть две программы на C:
клиент и сервер.
Я не буду разрабатывать все детали кода, все работает нормально. За исключением этого пункта: я хочу, чтобы мой сервер отправлял цветные сообщения подтверждения, а мой клиент идентифицировал их.
На сервере строки выглядят так:
//server side there there is:
FILE * stream; // for the socket
fprintf(stream,"\x1b[31m220\x1B[0m GET command received please type the file name\n");
//here stream refers to a classic BSD socket which connect client to server
//\x1b[31m colors text in red
//\x1B[0m put back text color to normal
И мне интересно, какой код я должен использовать для обнаружения подтверждения на клиенте:
//Client side there is:
FILE * stream; // for the socket (client side)
char buffer[100]; //to receive the server acknowledgment
//fgets put the received stream text in the buffer:
fgets (buffer , sizeof buffer, stream);
//Here strncmp compares the buffer first 11 characters with the string "\x1b[31m220"
if (strncmp (buffer, "\x1b[31m220",11)== 0)
{
printf("\x1B[48;5;%dmCommand received\x1B[0m%s\n",8,buffer);
}
Вещи не работают. Интересно, что мне поставить вместо "\x1b[31m220",11
в клиенте, чтобы все заработало. Я подозреваю, что некоторые символы цветового кода интерпретируются и поэтому исчезают из строки, но какие именно?
Здесь есть объяснение цветового кода: stdlib и цветной вывод в C
//Here strncmp compares the buffer first 11 characters
вот в чем проблема,\x1b
занимает всего 1 символ, это экранирующий код, должно быть 8. - person David Ranieri   schedule 28.06.2020