Ваш код в настоящее время несколько сломан. Ответ - tcpClient.ReceiveBufferSize
, независимо от того, сколько данных вы фактически получили - потому что вы игнорируете возвращаемое значение из networkStream.Read
. Он может возвращать всего несколько байтов, но вы все равно создаете строку, используя оставшуюся часть массива bytes
. Всегда проверяйте возвращаемое значение Stream.Read
, потому что иначе вы не знаете, сколько данных на самом деле было прочитано. Вы должны сделать что-то вроде:
Dim bytesRead = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
' Output the data received from the host to the console.'
Dim returndata As String = Encoding.ASCII.GetString(bytes, 0, bytesRead)
Теперь ASCII всегда имеет один символ на байт (и наоборот), поэтому длина строки будет в точности равна длине полученных вами данных.
Имейте в виду, что любые не-ASCII-данные (то есть любые байты свыше 127) будут преобразованы в '?' на Encoding.ASCII.GetString
. Вы также можете получить контрольные символы. Это определенно текстовые данные ASCII для начала? Если это не так, я бы порекомендовал его закодировать в шестнадцатеричном формате или использовать какой-либо другой параметр для сброса точных данных без потерь.