received
сообщает , сколько байтов в буфере в настоящее время допустимо . Перегрузка GetString
, которую вы используете, преобразует все байтов в буфере.
Вы можете перейти к передаче явного индекса и подсчета:
s += Encoding.UTF8.GetString(buffer,0,received);
Также обратите внимание, что эта техника, которую вы используете , не является в целом безопасной, но должна быть для подмножества символов base-64. Не все символы UTF-8 занимают один байт, и TCP не дает никаких гарантий, что вы не получите только часть символа, возвращаемого одним вызовом Receive
, тогда как оставшиеся байты этого символа будут доставлены (надеюсь 1 ) по следующему звонку.
(И комментарий Мэтью о том, что все это довольно странно, поскольку вы тоже можете просто отправить байты напрямую)
1 Я не имею в виду, что байты будут потеряны. Просто здесь есть несколько гарантий, поэтому вы не гарантируете, что следующий вызов получит всех оставшихся байтов для символа.