如何为传入数据设置字节扣的长度,以使其足够大



我正在通过TCP发送JPG:

在发件人方面,我们得到了:

 private void sendResponse() {
        BitmapImage bmi = new BitmapImage(new Uri(@"C:a.jpg", UriKind.Absolute));
        byte[] data;
        JpegBitmapEncoder encoder = new JpegBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bmi));
        using (MemoryStream ms = new MemoryStream()) {
            encoder.Save(ms);
            data = ms.ToArray();
        }
        clientStream.Write(data, 0, data.Length);
    }

但是我应该如何在另一侧设置缓冲区大小(接收器侧)?

我有4096字节的缓冲区设置,这显然是错误的:

public string Receive() {
            string response = "Operation Timeout";
            if (connection != null) {
                connectArgs.RemoteEndPoint = connection.RemoteEndPoint;
                connectArgs.SetBuffer(new Byte[4096], 0, 4096);
                connectArgs.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e) {
                    if (e.SocketError == SocketError.Success) {
                      BITMAP DECODING
                    } else {
                        response = e.SocketError.ToString();
                    }
                    _clientDone.Set();
                });
                _clientDone.Reset();
                connection.ReceiveAsync(connectArgs);
                _clientDone.WaitOne(3000);
            } else {
                response = "Socket is not initialized";
            }
            return response;
        }

如果您知道数据的确切大小,请将缓冲区设置为该大小。如果没有

以这个问题为例。

除了塞巴斯蒂安·内格拉斯斯(Sebastian Negraszus)。您可以添加自己的数据格式(应用程序协议)。

例如,您可以首先发送要传输的数据的大小。说,将是4个字节(INT类型的大小)。另一端将知道它必须从网络中读取4个字节才能知道从流中期望的数据量。

在另一端知道数据大小后 - 内存分配不应该是问题。

最新更新