これが私がやっていることです。基本的に、Linux Cで一連のデータを処理するコードがあり、それを「リアルタイム」でデータをグラフ化できるC#アプリに送信する必要があります。私が行っていたのは、データをファイルに保存し、C# アプリでファイルの変更を監視してからグラフを更新することでした。しかし、それは実際にはそれほどうまく機能していませんでした。ファイルは、面白くないというよりも頻繁に変更されていることを読み取っていました。そこで、ここで親切な人たちからアドバイスを受けた後、ソケットを使用してデータを送信する方法を学ぶことにしました。
だからここに私が今やっていることがあります。ソケット スタッフを使用して C# に送信する C のデータを処理します。完全に動作します。しかし、ここに問題があります。情報を送信した後に usleep(10000) を使用するか、 getchar() を使用して各値をゆっくり送信する必要があります。そうしないと、送信された値を double に変換しようとしてエラーが発生します。
エラーは、「System.FormatException: 入力文字列が正しい形式ではありませんでした。System.Number.ParseDouble(文字列値、NumberStyles オプション、NumberFormatInfo numfmt) で」と表示されます。
sprintf(line, "%.4f", value[i][j]);
write(sock, line, 128);
usleep(10000);
ここにある例から取られた C# コード: http://www.codeproject.com/Articles/463947/Working-with-Sockets-in-Csharp
問題はここにあります:
content = Encoding.ASCII.GetString(buffer, 0, bytesRead);
chart4.Series["Graph"].Points.Add(Convert.ToDouble(content.ToString()));
では、データの送信後に一時停止すると機能するのに、一時停止せずに送信すると機能しないのはなぜですか? 送信が速すぎますか?
また、一定のデータ フローを受信する必要がある 4 つの異なるチャートがある場合、それぞれが異なるポート番号を持つように 4 つの異なるソケットを用意して、どれがデータを受信しているかを知る必要がありますか? 初心者の質問で申し訳ありません。私は自分でこのことを学ぼうとしています。私はまだ学校に通っていますが、少しでも似たようなことをまだ学んでいません。