Так есть ли способ узнать, сколько данных собирается отправить клиент, чтобы я мог начать чтение для правильного объема данных?
Любой протокол должен иметь некоторыемеханизм, позволяющий клиенту указывать, когда он завершил отправку данных, либо в виде значения «длины», которое отправляется до фактических данных, либо в виде специальной завершающей последовательности, которая отправляется после данные.
Хорошо, если я использую только 1 байтовый массив для чтения со всех клиентов?или мне нужно создать байтовый массив для чтения с каждого клиента?
Зависит от того, как работает ваша программа.Если у вас будет несколько одновременно работающих клиентов, очевидно, что у вас не может быть только одного буфера, потому что они в конечном итоге будут перезаписывать друг друга.Если это один клиент за другим, но только один за раз, нет проблем с наличием только одного буфера.