C# 如何为传入数据设置byteBuffer的长度,使其足够大?

C# 如何为传入数据设置byteBuffer的长度,使其足够大?,c#,.net,tcp,bitmap,buffer,C#,.net,Tcp,Bitmap,Buffer,我正在通过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(

我正在通过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;
        }
公共字符串接收(){
string response=“操作超时”;
if(连接!=null){
connectArgs.RemoteEndPoint=connection.RemoteEndPoint;
connectArgs.SetBuffer(新字节[4096],0,4096);
connectArgs.Completed+=新的事件处理程序(委托(对象s,SocketAsyncEventArgs e){
如果(e.SocketError==SocketError.Success){
位图解码
}否则{
响应=e.SocketError.ToString();
}
_clientDone.Set();
});
_clientDone.Reset();
connection.ReceiveAsync(connectArgs);
_威通(3000);
}否则{
response=“套接字未初始化”;
}
返回响应;
}

如果您知道数据的确切大小,请将缓冲区设置为该大小。如果不是,则将其设置为合理值,并从流中读取,直到其为空


请参见作为示例。

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

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

在另一端知道数据大小后,内存分配不应该成为问题