套接字从linux C到Windows c#的问题
本文关键字:问题 Windows linux 套接字 | 更新日期: 2023-09-27 18:08:46
我是这样做的。基本上,我在linux C中有一些代码处理一堆数据,然后我需要将其发送到一个c#应用程序,该应用程序可以"实时"绘制数据。我所做的是将数据保存到一个文件中让c#应用程序监视文件更改,然后更新图形。但这并不是很有效。文件读到的是它正在频繁地更改,而不是它并不有趣。因此,在听取了一些有帮助的人的建议后,我决定学习如何使用套接字发送数据。
这就是我现在在做的。处理数据在C发送到c#使用套接字的东西。完全可行。但问题来了。我需要在发送信息后使用ussleep(10000),或者使用getchar()并缓慢发送每个值。否则,我得到一个错误,试图将发送的值转换为双精度。
错误显示"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个不同的套接字,每个套接字都有不同的端口号,这样我就知道哪个是接收数据?不好意思,我的问题很幼稚。我正试着自己学习这些东西。我还在上学,还没有学到任何类似的东西。
TCP套接字是流。他们没有信息的概念。如果发送太快,在一次调用中会接收到几个要发送的呼叫,这会导致尝试解析几个数字的部分。
我建议您选择以下选项之一:
- 在每个样本之间添加分隔符。
- 使用基于消息的协议,而不是基于流的协议。
- 写固定大小的消息。例如,只需发送
double
的原始8字节,然后使用BinaryReader
读取它们。