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