Вам не нужно «ставить в очередь» данные, поступающие от клиентов.Потому что TCP сделает это за вас.Управление потоком данных TCP даже замедляет работу клиентов, если сервер слишком медленный, чтобы освободить место для приемного буфера TCP.
Таким образом, возможно, имеется ошибка в коде сервера или клиента.Возможно, клиент отправляет '\ 0' в конце каждой строки.В этом случае следующий код не будет печатать все строки:
if((nbytes=recv(conid, buf, sizeof buf, 0)) <= 0) {
//handle break in connection
} else {
//for this example, just print out data from client to make my point
buf[nbytes] = 0;
printf("%s\n",buf);
}
Можно даже ожидать, что 2-я строка - это последняя строка, которую вы видите, если клиент отправляет '\ 0' в конце каждогоline.
Например:
Если клиент отправляет следующие строки:
"abc\n\0"
"def\n\0"
"ghi\n\0"
Обычно TCP отправляет их, используя два пакета, которые содержат следующее:
"abc\n\0"
"def\n\0ghi\n\0"
Серверу обычно требуется 2 вызова recv для получения входящих данных.Таким образом, ваш сервер будет использовать 2 вызова для печати:
printf("%s\n", "abc\n\0\0");
printf("%s\n", "def\n\0ghi\n\0\0");
И результат будет:
abc
def