古いネットワーク カメラを自分のコンピュータに接続しようとしていますが、非常に基本的な問題で立ち往生しています。つまり、ストリームの終わりを検出することです。
カメラと通信するために を使用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 バイトを読み取り、ストリーム内の位置を 1 バイト進めるか、ストリームの末尾にある場合は -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.