.net BeginRead是否保证读取调用后到达的任何传入字节?

.net BeginRead是否保证读取调用后到达的任何传入字节?,.net,asynchronous,asyncsocket,.net,Asynchronous,Asyncsocket,假设在调用BeginRead之后,还有其他代码将最终触发我想要读取的字节的到达。是否可能出现以下情况: (1) 调用BeginRead,传入'buf'并返回 (2) 执行保证在(1)之后的其他代码,并将字节发送到端口 (3) 字节到达目的地为端口,但由于某些定时问题而未读入“buf” 我不希望这是可能的,但我希望从有经验的人确认。如果这在某种程度上是可能的,那么有什么替代方案可以获得我正在寻找的保证呢?BeginRead将在某些数据可用时完成,但有多少数据不能保证。最明显的例子是,如果在将“额外

假设在调用BeginRead之后,还有其他代码将最终触发我想要读取的字节的到达。是否可能出现以下情况:

(1) 调用BeginRead,传入'buf'并返回 (2) 执行保证在(1)之后的其他代码,并将字节发送到端口 (3) 字节到达目的地为端口,但由于某些定时问题而未读入“buf”


我不希望这是可能的,但我希望从有经验的人确认。如果这在某种程度上是可能的,那么有什么替代方案可以获得我正在寻找的保证呢?

BeginRead
将在某些数据可用时完成,但有多少数据不能保证。最明显的例子是,如果在将“额外”数据发送到端口之前缓冲区已经被填充。。。但同样地,缓冲区也不必填充—例如,在网络流中,
BeginRead
可能会在读取单个数据包时返回,即使途中还有更多数据包


您可能希望反复调用
BeginRead
,直到您读取了流中的所有数据(即,另一端已关闭连接)或读取了尽可能多的数据(例如,整个长度前缀消息).

如果您想进行适当的网络通信,您必须进行应用程序级别的帧处理


实际上,最简单的方法是使用一个消息传递库来为您解决所有这些问题。看看,它真的很棒,而且有一个.NET绑定。

字节可能在那里,但它们可能不在您要找的地方。很难说没有看到代码。我建议使用WireShark进行监视,以确保您认为正在发送的数据是真实的