服务器端发送图片
private void btnListener_Click(object sender, EventArgs e)
{
udpSend = new UdpClient();
// 截图
udpSendImage.SendMessage(this.hHwnd, 0x41e, 0, 0);
IDataObject obj1 = Clipboard.GetDataObject();
if (obj1.GetDataPresent(typeof(Bitmap)))
{
// 获取视频中的图片
Image image = (Image)obj1.GetData(typeof(Bitmap));
imageInfo = ImageToByteArray(image);
// int length = ImageToByteArray(image).Length;
try
{
udpSend.Send(imageInfo, imageInfo.Length, ep);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "service");
}
}
// 将图片转换成二进制
private byte[] ImageToByteArray(Image image)
{
MemoryStream ms = new MemoryStream();
image.Save(ms,ImageFormat.Gif);
return ms.ToArray();
}
客户端接受图片
private void btnClient_Click(object sender, EventArgs e)
{
udpRecevice = new UdpClient(2000);
try
{
receviceInfo = udpRecevice.Receive(ref ep);
this.pictureBox1.Image = ByteArrayToImage(receviceInfo, receviceInfo.Length);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"client");
}
}
// 将二进制转换成图片
public Image ByteArrayToImage(byte[] byteArrayIn, int count)
{
MemoryStream ms = new MemoryStream(byteArrayIn, 0, count);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
运行的时候报错了,
错误是:一个在数据报套接字上发送的消息大于内部消息缓冲器或其他一些网络限制,或该用户接受数据报的缓冲器比数据报小
怎么解决啊,请求帮助
谢谢
UDP 包的大小是有限制的,windows 下默认限制为 8K ,你调整一下UDP 的接受和发送缓冲区大小试试,不如还是不行,只能用分包的方法发或者用TCP 来传送。
一张图片转出数据报是非常大的,所以只能通过拆分形式发送,因为缓冲区内存只有60kg左右,一张图片都差不多2g了