Относительно количества байтов, которые вы читаете за раз, не имеет никакого отношения к количеству байтов, которые вы пишете - это очень зависит от условий сети и будет переменным с каждым чанком (в основном, столько байтов удалось передать вкороткий промежуток времени между чтениями, сколько вы получите в блоке чтения.
Относительно конца потока - в коде вашего сервера вы забыли закрыть выходной поток (вы закрываете только поток, который является входнымПоток - вы также должны закрыть средство записи, которое, в свою очередь, закроет основной выходной поток.
Два комментария:
1) Я бы действительно рекомендовал использовать Buffered Readers / Writers, обертывающие записи / читатели- код, который вы получите, будет лучше, и вам не придется создавать / управлять буферами самостоятельно.
2) Используйте try {} finally и закройте ваши потоки в предложениях finally - это лучший метод, который поможетуверен, что вы закроете потоки и свободные ресурсы даже в случае проблем сочтение / письмо.