您的位置:首页 > 编程语言 > Java开发

JAVA UDP 图像传输实例

2007-04-18 10:19 561 查看
前言: UDP 方式传递数据分两个步骤 ,第一步 构建UDP 数据包 ,第二步  创建  UDP  SOCKET
发送数据的时候:   构建UDP 数据包 需要写好 目的  IP 地址,以及目的主机的端口号
                                DatagramPacket data=new DatagramPacket(b,b.length,address,7000);
                                发送数据包 创建 SOCKET 可以不用指定端口号
                                DatagramSocket mailSend=new DatagramSocket();
接收数据的时候:  创建UDP 数据包不需要写IP 地址和端口号
                               pack=new DatagramPacket(b,b.length);
                               接收数据包时,创建SOCKET必须写端口号
                              mailReceive=new DatagramSocket(7000);

本例子是通过UDP 方式,从服务器端发送一幅图到客户端,客户端显示出来

编译后运行      java Server ,然后再开一个cmd 窗口 运行 java Client 。点击client 窗口的get picture 就可以了
注意 图片文件 a.jpg 需要和编译好的类放在一起。




/** *//**


 * @(#)Server.java


 *


 * Server application


 *


 * @author 


 * @version 1.00 2007/4/16


 */


import java.net.*;


import java.io.*;


 




public class Server ...{


    




    public static void main(String[] args) ...{


        


        DatagramPacket pack=null;


        DatagramSocket mailReceive=null;


        ServerThread thread;


        byte b[]=new byte[8192];


        InetAddress address=null;


        System.out.println("server is running");


        pack=new DatagramPacket(b,b.length);


    




       try ...{


               mailReceive=new DatagramSocket(7000);


               System.out.println("socket build");


           }


        catch(IOException e)




        ...{


        e.printStackTrace();


         }




        while(true)...{




            try ...{


                mailReceive.receive(pack);


                address=pack.getAddress();


                System.out.println("get client address:"+address);


              


                }




            catch(IOException e)...{


                    System.out.println("error is here");


                }


           


            if(address!=null)




            ...{


                System.out.println("get address");


                new ServerThread(address).start();


            }    


                else




            ...{


             System.out.println("can't get address");


             continue;        


               }        


                


           }


    


    


 }


}


class ServerThread extends Thread




...{


    InetAddress address;


    DataOutputStream out=null;


    DataInputStream  in=null;


    String s=null;


    ServerThread(InetAddress address)




    ...{


        this.address=address;


    }


    public void run()




    ...{


        FileInputStream in;


        byte b[]=new byte[8192];




        try ...{


            in=new FileInputStream("a.jpg");


            int n=-1;


            while((n=in.read(b))!=-1)




            ...{


                DatagramPacket data=new<
1293c
span style="color:rgb(0,0,0);"> DatagramPacket(b,b.length,address,5678);


                DatagramSocket mailSend=new DatagramSocket();


                mailSend.send(data);


                System.out.println("read image");    


            }


            in.close();


            byte end[]="end".getBytes();


            DatagramPacket data=new DatagramPacket(end,end.length,address,5678);


            DatagramSocket mailSend=new DatagramSocket();


            mailSend.send(data);


            System.out.println("send all image data ok");


            


        }




        catch(Exception e)...{


            e.printStackTrace();


            }


    }


    


}




/** *//**


 * @(#)Client.java


 *


 *


 * @author pkgold1


 * @version 1.00 2007/4/16


 */




import java.net.*;


import java.awt.*;


import java.awt.event.*;


import java.io.*;










public class Client extends Frame implements  Runnable, ActionListener ...{


    Button b=new Button("get picture");


    ImageCanvas canvas;




        public Client() ...{


            super("I am a client");


            setSize(600,600);


            setVisible(true);


            b.addActionListener(this);


            add(b,BorderLayout.NORTH);


            canvas=new ImageCanvas();


            add(canvas,BorderLayout.CENTER);


            Thread thread=new Thread(this);


            validate();


            addWindowListener(new WindowAdapter()




            ...{




                public void windowClosing(WindowEvent e)...{


                    System.exit(0);


                }


            });


            thread.start();


         }




         public void actionPerformed(ActionEvent event)...{


             byte b[]="please send picture".trim().getBytes();




             try...{


                 InetAddress address=InetAddress.getByName("localhost");


                 DatagramPacket data=new DatagramPacket(b,b.length,address,7000);


                 DatagramSocket mailSend=new DatagramSocket();


                 mailSend.send(data);


                 System.out.println("client send data");


                 


             }




             catch(Exception e)...{


                 e.printStackTrace();


                 }


         }


     public void run()




     ...{


         DatagramPacket pack=null;


         DatagramSocket mailReceive=null;


         byte b[]=new byte[8192];


         ByteArrayOutputStream out=new ByteArrayOutputStream();




         try ...{


             pack=new DatagramPacket(b,b.length);


             mailReceive=new DatagramSocket(5678);


             System.out.println("reay receive data");


                }




                catch(Exception e)...{


                    e.printStackTrace();


                    


                }




         try ...{




             while(true)...{


                 mailReceive.receive(pack);


                 String message=new String(pack.getData(),0,pack.getLength());


                 if(message.startsWith("end"))




                 ...{


                     System.out.println("get all data ok");


                     break;


                 }


                 out.write(pack.getData(),0,pack.getLength());


                 System.out.println("I am getting data");


             }


             byte imagebyte[]=out.toByteArray();


             out.close();


             Toolkit tool=getToolkit();


             Image image=tool.createImage(imagebyte);


             canvas.setImage(image);


             System.out.println("paint image");


             canvas.repaint();


               validate();


         }




         catch(IOException e)...{


             e.printStackTrace();


             }


             


     }


     public static void main(String args[])




     ...{


         new Client();


     }


    


}


import java.awt.*;


import java.awt.event.*;


class ImageCanvas extends Canvas




...{


    Image image=null;




    ...{


        setSize(200,200);


    }




    public void paint(Graphics g)...{


        if(image!=null)




        ...{


            g.drawImage(image,0,0,this);


        }


        else




        ...{


            this.image=image;


        }


    }


    public void setImage(Image image)




    ...{


        this.image=image;


    }


    


}

希望对学习java 网络编程的同学有所帮助。我的email : pony1976@sina.com.cn. 欢迎转载,请保留我的email.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息