Никогда не работал с ардуино и с этой библиотекой, но принципы везде одни и те же.
1.Обычно, когда получаете данные по сети, то получаете не строку с завершающим нулем, а байтовый массив с длинной. Уточните в документации, что именно возвращает tcpReply().
2.При передаче данных по сети нет гарантии, что вы получите за один вызов функции чтения всю переданную информацию. Обычно либо передают в начале размер последующих данных, либо данные должны заканчиваться определенным значением и чтение из потока производится до получения этого значения.
Если tcpReply() возвращает строку с завершающим нулем, то преобразовать ее в
String можно просто передав ее в конструктор:
String data(reply);