从套接字连续接收数据并读取所选数据

时间:2013-06-20 06:31:40

标签: c# visual-studio-2010 sockets

我想阅读称重机插座并在GUI中更新其值。

套接字将连续发送当前权重值。 我的数据(权重)将小于100个字节。

如果我将缓冲区设为100,则需要花费太多时间来更新当前值,因为它必须读取所有剩余字节。所以,我将缓冲区大小更改为4096字节。现在值正在更新实时。

我的问题是,
---提供4096字节的性能确实是一个很大的开销(与100字节相比)?? ---是否可以读取清除所有可用数据,并在收到消息时读取最后100个字节?

我用于回拨的代码:

   private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                //Get received bytes count
                var bytesRead = _clientSocket.EndReceive(ar);
                if (bytesRead > 0)
                {
                    //Copy received bytes to a new byte array
                    var receivedBytes = new byte[ReceiveBufferSize];

                    Array.Copy(_buffer, 0, receivedBytes, 0, 100); //100 byte is enough for checking the data

                    FormatAndUpdateGUI(receivedBytes);

                }
                else
                {
                    throw new Exception("Error in Reading");
                }
        //Read more bytes 
                    _clientSocket.BeginReceive(_buffer, 0, _buffer.Length, 0, new AsyncCallback(ReceiveCallback), null);
            }
            catch (Exception ex)
            {
               throw new Exception("Error in Reading");
            }
        }

1 个答案:

答案 0 :(得分:1)

您应始终阅读bytesRead,以便在任何给定时间阅读最大可用数据。在这种情况下,您还可以使用byte大小为bytesRead的数组来优化内存使用量,以便它与您需要的内容完全匹配,而不是某些预定义的最大值。