Ваш клиент печатает новую строку до lsbuf
, следовательно, все, поскольку предыдущий символ новой строки теряется в вашем буфере вывода.
Четыре решения:
- используйте
printf("%s\n", lsbuf);
вместо ..."\n %s"...
- используйте
puts(lsbuf);
, что имеет тот же эффект, но немного более уместно - используйте
fflush(stdout)
после цикла клиента, чтобы очистить буфер вывода - использовать небуферизованный вывод, подробности смотрите в setvbuf ()
Обратите внимание, что эта проблема не связана с сетью (хотя я бы заменилMSG_MORE
с 0
), это просто проблема с буферизацией вывода.
В отношении идентификатора я настоятельно рекомендую отправлять strlen(dp->d_name) + 1
байтов вместо 100 байтов.Таким образом, вы не будете отправлять больше байтов, чем необходимо, а с другой стороны, вы не будете усекать выходные данные, если ваши записи каталога окажутся больше 100 байтов.
Кроме того, ни ваш клиент, ни вашсервер проверяет, возвращает ли send()
/ recv()
0
, что означает, что соединение было закрыто удаленным концом.