Спасибо за ваш комментарий.
аюсь подключить древнюю сетевую камеру к своему компьютеру, и я застрял в очень фундаментальной проблеме - обнаружении конца потока.
Я использую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
как значение для остальных элементов, и оно не останавливается, пока я не остановлю выполнение вручную. Вот как это выглядит:
Итак, мой вопрос: я что-то упустил здесь? Как я могу определить конец потока?
Большое спасибо,
ЧАС.