C # - TcpClient - ¿Detectando el final de la transmisión?
stoy tratando de conectar una cámara de red antigua a mi computadora y estoy atrapado en un problema fundamental: detectar el final de la transmisión.
Estoy usandoTcpClient
para comunicarme con la cámara y realmente puedo verla transmitiendo los datos del comando, no hay problemas aquí.
List<int> incoming = new List<int>();
TcpClient clientSocket = new TcpClient();
clientSocket.Connect(txtHost.Text, Int32.Parse(txtPort.Text));
NetworkStream serverStream = clientSocket.GetStream();
serverStream.Flush();
byte[] command = System.Text.Encoding.ASCII.GetBytes("i640*480M");
serverStream.Write(command, 0, command.Length);
Volver a leer la respuesta es donde comienza el problema. Inicialmente pensé que algo simple como el siguiente código habría funcionado:
while (serverStream.DataAvailable)
{
incoming.Add(serverStream.ReadByte());
}
Pero no fue así, así que tuve esta vez otra versión con ReadByte (). La descripción dice:
Lee un byte de la secuencia y avanza la posición dentro de la secuencia en un byte, o devuelve -1 si está al final de la secuencia.
so pensé que podría implementar algo en la línea de:
Boolean run = true;
int rec;
while (run)
{
rec = serverStream.ReadByte();
if (rec == -1)
{
run = false;
//b = (byte)'X';
}
else
{
incoming.Add(rec);
}
}
Nope, todavía no funciona. De hecho, puedo ver la entrada de datos y después de cierto punto (que no siempre es el mismo, de lo contrario podría haber leído tantos bytes cada vez) empiezo a obtener0
como el valor para el resto de los elementos y no se detiene hasta que detenga manualmente la ejecución. Así es como se ve:
Entonces mi pregunta es, ¿me estoy perdiendo algo fundamental aquí? ¿Cómo puedo detectar el final de la transmisión?
Muchas gracias
H.