Solucionado, por si a alguien le sirve, en el metodo de recibirString, la cosa se quedaria asi:
Código C#:
Ver originalpublic string recibirString()
{
if (stream == null)
stream = conexion.GetStream();
int longitud = recibirLongitud();
Byte[] bytes = new Byte[longitud];
Int32 i;
String datos = String.Empty;
int bytesRecibidos = 0;
while (bytesRecibidos < longitud)
{
i = stream.Read(bytes, bytesRecibidos, longitud-bytesRecibidos);
bytesRecibidos += i;
}
datos = System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length);
return datos;
}