Я полагаю, что проблема связана с не отслеживанием общего количества прочитанных байтов. Ваш байтовый буфер, установленный на ReceiveBufferSize, скорее всего, больше, чем фактическое число прочитанных байтов. Принимая во внимание фактическое чтение байтов, а затем передавая его в метод Encoding.UTF8.GetString (), вы должны получить действительную строку, которую можно объединить. Вот пример:
NetworkStream ns;
System.Net.Sockets.TcpClient client = new TcpClient();
byte[] receiveBytes = new byte[client.ReceiveBufferSize];
int bytesRead = ns.Read(receiveBytes, 0, receiveBytes.Length);
String returndata = Encoding.UTF8.GetString(receiveBytes,0,bytesRead);
returndata = returndata.Trim(new char[] {'\0'});
Обратите внимание также на другое предложение о чтении нулевого терминатора и включении его в прочитанные байты, также может быть проблемой. Я включил обрезку строки, чтобы убедиться, что нулевые терминаторы удалены.