0

我需要创建一个通过 tcpip 连接到医疗机器的客户端。这台机器在发生内部事件时,会向我发送一个或多个 XML 文件,其中包含我需要处理的数据。由于这些事件是不可预测的,我想到了异步连接,它获取数据并将其保存在文件系统上。基本上,对于该机器发送的每个 XML,我都必须将其保存到磁盘上。

我搜索了一下,因为我在 tcp/ip 编程方面没有太多经验,我在 MSDN 上找到了一个异步客户端示例(客户端示例

首先,不工作的财产,因为Console.WriteLine("Response received : {0}", response);从来没有被击中。然后,当那台机器只向我发送一个文件时,在缓冲区我有两次相同的数据。而且我还在猜测如何在发送的 xml 文件中检测 EOF。

我也考虑过轮询,但作为解决方案似乎不正确。有什么提示吗?

4

1 回答 1

1

我很确定在这种情况下轮询将无济于事。

很少有事情可以向您展示一些好的建议:

1)。套接字以您决定大小的一些预定义提供的字节数组为您提供接收到的数据,因此请确定大小。例如:

public const int BufferSize = 256;

对于 MSDN 上的示例,是 256,现在如果您的数据大小为 260 字节,它将首先向您发送 256 字节,然后在下一次接收时将向您发送其余 4 字节。这可能是您需要找到一种方法来堆积收到的所有这些数据然后每次检查开始标识符和结束标识符以提取您需要的数据的一个原因。从另一个角度来看,如果您考虑数据的平均大小定义更大的字节缓冲区大小。在大多数情况下,您将一次性收到整个消息。但是您仍然无法 100% 实现它,这就是套接字的工作方式。

2)。您可能已经收到两次数据或某种损坏的数据,因为缓冲区字节数组未在适当的时间清除或在下次使用前未刷新。

3)。EOF 或 EOT 可以通过多种方式确定,如果您可以控制医疗机器,您可以在其发送数据之前在末尾插入一个标识符,并使用它来区分发送的消息。如果您没有对发送方的编程控制并且您确定要接收 XML 格式,您可以随时尝试在接收到的数据中查找“<xml>”“</xml>”文本并在此基础上进行区分。

于 2012-11-22T13:20:09.043 回答