我正在通过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个字节才能知道从流中期望的数据量。
在另一端知道数据大小后 - 内存分配不应该是问题。