У вас есть этот код:
char nickmsg[550];
strcpy(nickmsg, "<");
strcat(nickmsg, username);
strcat(nickmsg, "> ");
strcat(nickmsg, buf);
write(sd, nickmsg, sizeof(nickmsg));
Это всегда отправляет 550 байтов, поскольку sizeof(nickmsg)
равно 550. Конец сообщения будет помечен нулевым байтом, посколькуnicknmsg
- это строка в стиле C.
Если получатель всегда захватывает 550 байтов и игнорирует все байты после нуля, это будет работать нормально.Вы просто будете отправлять клиентам ненужные байты, которые могут утечь конфиденциальную информацию.
Вопрос в том, что вы должны отправлять?Что означает для обозначения конца сообщения?
Внимание : Не изменяйте sizeof(nickmsg)
на strlen(nickmsg)
.Это оставит клиенту нет способ идентифицировать конец сообщения.(Если вы не уверены на 100%, клиенту не нужно идентифицировать конец сообщений.)