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