我正在尝试将一个古老的网络摄像机连接到我的计算机,但我遇到了一个非常基本的问题——检测流的结束。
我正在使用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。