首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# UDP发送图片解决办法

2013-01-11 
C# UDP发送图片如题我把picturebox中的图片转换为二进制数组后用UDP发送出去,接收的时候吧这个数组转换为

C# UDP发送图片
如题我把picturebox中的图片转换为二进制数组后用UDP发送出去,接收的时候吧这个数组转换为图片显示在picturebox中但是为什么显示的是一张全黑的图片?
发送:
UdpClient picUDP = new UdpClient();
            try
            {
                //让其自动提供子网中的IP广播地址
                IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 8001);
                Image TempPic = pictureBox1.Image;
                MemoryStream ms = new MemoryStream();
                TempPic.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] bytes = new byte[ms.Length];
                bytes = ms.ToArray();
                //向子网发送信息
                picUDP.Send(bytes, bytes.Length, iep);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message, "发送失败");
            }
            finally
            {
                picUDP.Close();
            }
接收
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            //在本机指定的端口接收
            udpClient = new UdpClient(port);
            IPEndPoint remote = null;
            //接收从远程主机发送过来的信息;
            while (true)
            {
                try
                {
                    //关闭udpClient时此句会产生异常
                    byte[] bytes = udpClient.Receive(ref remote);
                    Data.remoteIP = remote.ToString();


                    worker.ReportProgress(0, bytes);
                }
                catch
                {
                    udpClient.Close();
                    break;
                }
            }
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            toolStripStatusLabel1.Text = "客户端IP:"+Data.remoteIP;
            byte[] Result = (byte[])e.UserState;
            if (Result != null)
            {
                MemoryStream ms = new MemoryStream(Result,0,Result.Length);
                Image image = Image.FromStream(ms);
                pictureBox2.Image = image;
            }
        } c# image
[解决办法]
看的头晕,只说一句注意New MemoryStream().Length是long类型
[解决办法]
这个不确定(没有测试)。

不过我可以确定的是,你可以将Image对象进行“二进制序列化/反序列化”,而不需要去Save和读取数据。

热点排行