图片是本机上的。 想取出来转换为字节数组 传送出去。  那一端通过接受字节数组 再转换为图片。
 

解决方案 »

  1.   

    用 FileInputStream 打开该文件,读取出来保存到数组就是了。
    考虑到你的应用场景,建议不用全部转为数组,可以先把Socket通道建立好,然后边读取边发送给对方(比如可以每次读取8K然后发送8K),这样内存占用不会随图片大小而增加。
      

  2.   

    使用字节流就ok   FileInputStream打开,读到的数据就是字节数组
                      FileOutputStream 写字节数组到文件
      

  3.   

     
     是这样的  要求用的是UDP传送。 
      

  4.   

    就是说假如UDP客户端 点击一个获取图片的按钮,然后服务器检测到有请求就马上传送一个图片 显示在客户端这边
      

  5.   


    UDP是非可靠传输,也就是传递过去的东西可能会缺一块,这个会比较麻烦。抛开传输完整性先不提的话,用UDP传输也没啥差异,你就从FileInputStream中读取 8K,然后把这8K打个UDP数据包,发送;然后再读取下一个8K.... 没啥区别啊
      

  6.   

    UDP是非可靠传输,说他非可靠,是因为它在传输过程中不校验,其实也是很可靠地。
      

  7.   

    UDP 会丢包,到时候图片会有差异
      

  8.   

    UDP传输一样啊,  可以定义协议啊  图片字节数组大小(lengh)+图片字节数组,然后过去解包,解包发现大小不一样,就等待或者丢掉。
      

  9.   


    说明程序有Bug,先用超小的图片,比如只有 2K 大小的,做做调试,看看问题在哪。
      

  10.   


    就是说你连续发送 10 个UDP包,对方可能只能收取到 8 个,而且不保证接收到的顺序跟发送的顺序一致。
      

  11.   

    看代码,服务端 import java.io.File;
    import java.io.FileInputStream;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;public class UDP1 {
      public static void main(String[] args) throws Exception {
    DatagramSocket socket = new DatagramSocket(5000);
    byte[] b = new byte[100];
    DatagramPacket receivePacket = new DatagramPacket(b,b.length);
    socket.receive(receivePacket);
    // 检测是否有请求发过来。
    if(0!=receivePacket.getLength()){
    File file = new File("E:/123.png");
    FileInputStream in = new FileInputStream
    (file);
      byte[] b1 = new byte[(int)file.length()];
      in.read(b1,0,b1.length);
      DatagramPacket sendPacket =new DatagramPacket(b1,b1.length,
      receivePacket.getAddress(),receivePacket.getPort());
      socket.send(sendPacket);
    }
      }
    }
    客户端import java.awt.BorderLayout;
    import java.awt.Canvas;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayInputStream;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;import javax.imageio.ImageIO;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class UDP2 implements ActionListener{
    JButton btn;
    JPanel jp;
    MyCanvas1 cav = new MyCanvas1();
    BufferedImage image;
        public UDP2(){
         JFrame jf= new JFrame("I am a client");
         btn = new JButton("获取图像");
         jp= new JPanel();
         jf.add(btn,BorderLayout.NORTH);
         btn.setSize(250,30);
         btn.addActionListener(this);
         cav.setPreferredSize(new Dimension(250,250));
         jp.add(cav);
         jf.add(jp,BorderLayout.SOUTH);
         jf.pack();
         jf.setVisible(true);
        
        }
        class MyCanvas1 extends Canvas{
         public void paint(Graphics g){
         g.drawImage(image,0,0,this);
         }
        }
    public void actionPerformed(ActionEvent e) {
    try{
        DatagramSocket socket = new DatagramSocket();
        String str="请求图片";
        DatagramPacket sendPacket = new DatagramPacket
         (str.getBytes(),str.length(),
         InetAddress.getByName("localhost"),5000);
        socket.send(sendPacket);
        byte[] image1 = new byte[3000];
    DatagramPacket receivePacket =new DatagramPacket(image1,3000);
    socket.receive(receivePacket);
    ByteArrayInputStream bais = new ByteArrayInputStream
    (image1,0,receivePacket.getLength());
    BufferedImage img = ImageIO.read(bais);
           image = img;
           cav.repaint();
        socket.receive(receivePacket);
        socket.close();
         }catch(Exception en){
         en.printStackTrace();
        }
     }
      public static void main(String[] args)throws Exception {
    new UDP2();
    }
    }
    跑起来 点击按钮的时候 服务端那边就停止了。 这边没接收到 , 也没报错
      

  12.   

    不过建议 多提点意见啊~~  UDP传送 貌似 是限制数据大小的~ 万一大了, 分批传, 那数据就不能保证完整啊
      

  13.   

    看这个http://blog.csdn.net/firecoder/article/details/5702429
      

  14.   

    sun.misc.BASE64Decoder
    sun.misc.BASE64Encoder
    byte[]编码 字符串传输 在解码就OK了