我在客户端截取了一段图片,为什么传输到服务器端的时候只传了一半,大部分都是黑色.代码如下:
发送端:        private void button1_Click(object sender, EventArgs e)
        {
                 
                //建立终结点 
                System.IO.MemoryStream Stream = new System.IO.MemoryStream();
                pictureBox1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Bmp);//存储为bmp图象
                 byte[] b = Stream.ToArray();                 
                //连接远程计算机 
                sendsocket.Send(b);
                //发送                 Stream.Close();
                sendsocket.Shutdown(System.Net.Sockets.SocketShutdown.Send);
                //关闭发送连接 
                sendsocket.Close();            //关闭本                 //***********************************************************************************************************end*******************************************************//          }接收端:
 private void button1_Click(object sender, EventArgs e)
        {
            this.label2.Text = "图象正在传输中,请稍侯";
            //设置接收数据缓冲区的大小
            byte[] b = new byte[300000000];
            System.Net.Sockets.Socket hostsocket = receivesocket.Accept();
            //如何确定该数组大小 
            System.IO.MemoryStream fs = new System.IO.MemoryStream();
            //接收数据
            hostsocket.Receive(b);
            fs.Write(b, 0, b.Length);
            Bitmap Img = new Bitmap(fs);
            pictureBox1.Image = Img;
            Img.Save("e:\\MyJpeg.jpg", ImageFormat.Jpeg);
            // this.Image1.ImageUrl = @"e:\MyJpeg.jpg";
            //关闭写文件流
            fs.Close();
            //关闭接收数据的Socket
            hostsocket.Shutdown(System.Net.Sockets.SocketShutdown.Receive);
            hostsocket.Close();
            this.label2.Text = "图象传输完毕";
        }

解决方案 »

  1.   

    谢谢楼上,怎么循环,我也加过while循环,但是出错了,就上面的接收端代码,怎么加呢,能写点代码提示吗
      

  2.   

     我这里加入循环以后,在执行到"Bitmap Img = new Bitmap(fs);"时,系统又提示:参数无效.
    private void button1_Click(object sender, EventArgs e)
            {
                this.label2.Text = "图象正在传输中,请稍侯";
                //设置接收数据缓冲区的大小
                byte[] b = new byte[2000001];
                System.Net.Sockets.Socket hostsocket = receivesocket.Accept();            //返回实际接收内容的字节数 
                int bytes = 0;
                //循环读取,直到接收完所有数据 
                while (true)
                {
                    bytes = hostsocket.Receive(b, b.Length, 0);
                    //读取完成后退出循环 
                    if (bytes <= 0)
                        break;
                }
                //如何确定该数组大小 
                System.IO.MemoryStream fs = new System.IO.MemoryStream();            fs.Write(b, 0, b.Length);
                Bitmap Img = new Bitmap(fs);
                pictureBox1.Image = Img;
                Img.Save("e:\\MyJpeg.jpg", ImageFormat.Jpeg);
                // this.Image1.ImageUrl = @"e:\MyJpeg.jpg";
                //关闭写文件流
                fs.Close();
                //关闭接收数据的Socket
                hostsocket.Shutdown(System.Net.Sockets.SocketShutdown.Receive);
                hostsocket.Close();
                this.label2.Text = "图象传输完毕";        }
      

  3.   

    先别该代码 ,就按照刚开始的,发一个小文件,看看可以吗?
    如果有问题,
    pictureBox1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Bmp);//存储为bmp图象
    修改成pictureBox1.Image.Save(@"c:\2.jpg", System.Drawing.Imaging.ImageFormat.Bmp);//存储为bmp图象
    看看保存出来的图片有问题没有.
      

  4.   

    pictureBox1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Bmp);//存储为bmp图象
    修改成pictureBox1.Image.Save(@"c:\2.jpg", System.Drawing.Imaging.ImageFormat.Bmp);//存储为bmp图象
    看看保存出来的图片有问题没有. 
      

  5.   

    pictureBox1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Bmp);//存储为bmp图象 
    修改成pictureBox1.Image.Save(@"c:\2.jpg", System.Drawing.Imaging.ImageFormat.Bmp);//存储为bmp图象 
    看看保存出来的图片有问题没有. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~保存出来的没问题