获取从 NetworkStream.EndWrite() 读取的字节数

问题描述

我需要获取从流中读取的字节数。我可以轻松地做到这一点

NetworkStream.Read();

然而,为了异步完成整个操作,我使用了 BeginRead() 和 EndRead()。

private void NetworkEndWrite(IAsyncResult result)
        {
            _client.Stream.EndWrite(result);
        }

        private void NetworkEndRead(IAsyncResult result)
        {
            _client.Stream.EndRead(result);
        }

        #endregion

        public string UploadProgramFromgalil()
        {
            if (_client.Connected)
            {
                
                int numberOfBytesRead = 0; 
                byte[] buffer = new byte[4096];
                StringBuilder receivedData = new StringBuilder();

                if (_client.Stream.CanWrite)
                { //send the upload command and block until everything is sent.
                    _client.Stream.BeginWrite(Upload,Upload.Length,new AsyncCallback(NetworkEndWrite),_client.Stream); //send the upload command
                }
                
                if (_client.Stream.CanRead)
                { //block until we get all of the data from the galil
                    _client.Stream.BeginRead(buffer,buffer.Length,new AsyncCallback(NetworkEndRead),_client.Stream); //reading this way does not return anything.
                    numberOfBytesRead = _client.Stream.Read(buffer,buffer.Length); //reading this way gives me number of bytes read
                }

                receivedData.AppendFormat("{0}",Encoding.ASCII.GetString(buffer,numberOfBytesRead)); //take the bytes and build the string
                CurrentProgram = receivedData.Replace(":","").ToString();
                CurrentProgram = CurrentProgram.Replace("\u001a","EN");
                return CurrentProgram;
            }
            else
            {
                Trace.WriteLine("Client is disconnected");
                return null; //Todo: handle this
            }
        }

EndRead() 返回一个 int,但我无法更改回调的返回类型。

到目前为止,我看到的唯一选择是创建一个成员 NumberOfBytes 读取并使用它。有没有更好的选择?

编辑:beginRead() 不应该被阻塞吗?它总是在所有数据包通过之前完成。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)