C# 如何为传入数据设置byteBuffer的长度,使其足够大?
我正在通过tcp发送jpg: 在发送方,我们得到: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(
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个字节才能知道从流中期望的数据量 在另一端知道数据大小后,内存分配不应该成为问题