jjzjj

BeginRead

全部标签

c# - 使用 FileStream.ReadAsync() 时,我应该以异步模式打开文件吗?

为FileStream执行异步I/O的旧.Net方法是使用FileStream.BeginRead()和FileStream.EndRead().FileStream.BeginRead()的MSDN文档指出:FileStreamprovidestwodifferentmodesofoperation:synchronousI/OandasynchronousI/O.Whileeithercanbeused,theunderlyingoperatingsystemresourcesmightallowaccessinonlyoneofthesemodes.Bydefault,FileS

c# - BeginRead 的缓冲区何时填充?

我正在尝试写一个TcpClient执行。我想在处理数据时开始下一次读取,但我不确定何时将字节数组传递给BeginRead被修改。这是我当前的实现privatevoidProcessData(){byte[]buffer=newbyte[_tcpClient.ReceiveBufferSize];varnetworkStream=_tcpClient.GetStream();IAsyncResultresult=networkStream.BeginRead(buffer,0,buffer.Length,null,null);intread;while((read=networkStre

c# - 过早中止 BeginRead 和 BeginWrite 的正确方法?

我有一个用C#编写的实用程序,用于与我们的USB设备来回通信。我们使用通用HID驱动程序并将设备句柄包装在FileStream对象中。我使用它的BeginRead和BeginWrite方法读取/写入数据,不是因为我需要异步IO,而是因为我可以超时以防设备进入不可通信状态(有意或不是)。所有读/写都在我自己的专用IO线程中完成。我担心我没有完全正确地做事,因为我已经看到一些我怀疑是线程死锁的情况。这是我的相关Read方法的精简版本(似乎工作正常)。if(_readResult==null){_readResult=_deviceStream.BeginRead(_readBuffer,0

c# - 使用 .Net 的 NetworkStream.Read/BeginRead 分隔应用程序协议(protocol)帧

我的问题对网络编程来说更笼统,但因为我正在尝试编写一个ModbusTCP服务器(从站),所以我将用它来说明我的问题。在ModbusTCP帧中,帧的第5和第6个字节给出了帧的大小:字节1和2:交易ID字节3&4:协议(protocol)Idbytes5&6:帧中剩余多少字节字节7-n:帧的其余部分。当使用NetworkStream.Read()/BeginRead()时,如何分隔接收到的帧?我看到一些开源实现只读取前6个字节,解析字节5和6以获得帧其余部分的大小,然后读取帧的其余部分。但是,如果您的框架中没有开始和结束定界符,您如何知道框架的开始和结束位置?例如,客户端可能发送了一些垃圾