C#如何在数据通信中实现等待确认?
我有一个类,它应该以包的形式发送/接收数据。此类包含一个事件处理程序,该处理程序在可从物理介质读取新数据时运行 在事件处理程序中,我从媒体读取数据,并解析完整数据包的可用数据。一旦识别出一个数据包,就会引发一个事件,将新数据包传递给订阅者。此事件的订阅者决定是否要使用数据包 到目前为止还不错。。。现在回答我的问题。虽然上面的场景可以将传入的数据分发给多个订阅者,并在应用程序中进一步放置进一步的处理逻辑,但这给我留下了一个问题: 有时,类将接收到一个数据包,该数据包只是对该类发送的另一个数据包的回复(想想ACK/FAIL) 我如何实现一种方法来发送等待确认的内容,同时不破坏上述在事件处理程序中处理传入原始数据的概念? 一些伪代码来说明问题:C#如何在数据通信中实现等待确认?,c#,events,blocking,wait,C#,Events,Blocking,Wait,我有一个类,它应该以包的形式发送/接收数据。此类包含一个事件处理程序,该处理程序在可从物理介质读取新数据时运行 在事件处理程序中,我从媒体读取数据,并解析完整数据包的可用数据。一旦识别出一个数据包,就会引发一个事件,将新数据包传递给订阅者。此事件的订阅者决定是否要使用数据包 到目前为止还不错。。。现在回答我的问题。虽然上面的场景可以将传入的数据分发给多个订阅者,并在应用程序中进一步放置进一步的处理逻辑,但这给我留下了一个问题: 有时,类将接收到一个数据包,该数据包只是对该类发送的另一个数据包的回
class CommCenter
{
public event NewPacketAvailable;
private void _newRawDataAvailable_EventHandler
{
// read incoming data from physical medium
// parse incoming data for packet structure
// the received packet may either contain a reply to
// a previously sent message or unrelated
// if packet found raise NewPacketAvailable event
// so that subscribers can handle the packet
}
public void SendMessage(DataPacket packet, Int32 timeoutInMilliseconds)
{
// put message on the physical medium
// wait for a packet confirming the previously sent packet
// How would I have to do this??
// the packet confirmation would arrive in _newRawDataAvailable_EventHandler
}
}
也许有一个好主意,甚至以前实现过这样的逻辑。我现在有点困惑该怎么办。很高兴能为您提供正确方向的帮助或指点;-) 好的,这就是它的工作原理: 在事件处理程序中,从介质读取数据。检查它是否是数据或只是对前一个数据包(ACK)的确认 如果是数据,请将其传递给其他人 如果是ACK,则将其放入ACK专用的
队列中
在发送消息后,在SendMessage
方法中迭代此确认队列
,直到:
超时发生
您发送的数据包的确认到达
就这样 好的,这就是它的工作原理:
在事件处理程序中,从介质读取数据。检查它是否是数据或只是对前一个数据包(ACK)的确认
如果是数据,请将其传递给其他人
如果是ACK,则将其放入ACK专用的队列中
在发送消息后,在SendMessage
方法中迭代此确认队列
,直到:
超时发生
您发送的数据包的确认到达
就这样 是的,请看我的答案,了解我是如何解决问题的。如果您需要任何详细信息,请告诉我,我很乐意详细说明。是的,请参阅我的答案,了解我是如何解决问题的。如果你需要任何细节,请告诉我,我很乐意详细说明。