正在访问客户端服务器应用程序 并且客户端将向服务器询问某个图像,然后服务器将其发送到客户端
当客户收到它时,它会将其显示在图片框中
所以这是我的代码
string line = null;
line = textBox3.Text;
socket.Send(Encoding.ASCII.GetBytes(line));
data = new byte[1024];
dataSize = socket.Receive(data);
//string s = Encoding.ASCII.GetString(data, 0, dataSize);
// textBox4.Text = s;
Image newImage;
using (MemoryStream ms = new MemoryStream(data,0,dataSize))
{
ms.Write(data,0,dataSize);
newImage = Image.FromStream(ms,true); //HERE I GOT THE PROBLEM
}
pictureBox1.Image = newImage;
}
然后它返回一个名为的参数错误,参数无效,所以我不知道这里有什么问题?
答案 0 :(得分:2)
很难相信图像的大小不到1KB。有更大的缓冲区:
data = new byte[1024 * 500]; //limit to 500KB
缓冲区小于图像的实际大小可能会导致数据不完整,这确实是图像的无效流。
答案 1 :(得分:0)
写入后,您需要将内存流的位置重置为开头:
...
ms.Write(data,0,dataSize);
ms.Position = 0;
newImage = Image.FromStream(ms,true); //HERE I GOT THE PROBLEM
...
答案 2 :(得分:0)
答案 3 :(得分:0)
您的网络代码有两种错误:
1)如果数据大于1024字节,则根本不起作用 2)如果传入的数据被分段,则它是中断(一个发送呼叫不映射到一个接收呼叫)。 TCP是一种不基于数据包的流协议。
要修复它,首先要写入图像的字节大小,并在读取读数时直到你有足够的字节,然后才从字节构造图像。