Я пытаюсь подключить древнюю сетевую камеру к своему компьютеру, и я застрял в очень фундаментальной проблеме - обнаружении конца потока.
Я использую TcpClient
для связи с камерой, и я действительно вижу, как она передает данные команды, здесь нет проблем.
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);
Чтение ответа - вот где начинается проблема. Сначала я думал, что сработает что-то простое, например, следующий фрагмент кода:
while (serverStream.DataAvailable)
{
incoming.Add(serverStream.ReadByte());
}
Но этого не произошло, поэтому на этот раз у меня была другая версия с использованием ReadByte (). Описание гласит:
Читает байт из потока и
продвигает позицию в пределах
поток на один байт или возвращает -1, если
в конце потока.
поэтому я подумал, что могу реализовать что-то вроде:
Boolean run = true;
int rec;
while (run)
{
rec = serverStream.ReadByte();
if (rec == -1)
{
run = false;
//b = (byte)'X';
}
else
{
incoming.Add(rec);
}
}
Нет, все еще не работает. Я на самом деле вижу, как данные поступают и после определенной точки (которая не всегда одинакова, в противном случае я мог бы просто прочитать столько байтов каждый раз), я начинаю получать 0
в качестве значения для остальных элементов, и это не не останавливайтесь, пока я не остановлю выполнение вручную. Вот как это выглядит:
Итак, мой вопрос: я что-то упустил здесь? Как я могу определить конец потока?
Большое спасибо,
H.