原创 JAVA UDP 图像传输实例 收藏

前言: 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 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.

发表于 @ 2007年04月18日 10:19:00|评论(loading...)

新一篇: Java 游戏编程基础 做个碰撞的小球 | 

用户操作
[即时聊天] [发私信] [加为好友]
pony1976bj
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
文章分类
    收藏
      存档
      软件项目交易
      Csdn Blog version 3.1a
      Copyright © pony1976bj