前言: 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 网络编程的同学有所帮助。
发表于 @ 2008年01月31日 15:38:00|评论(loading...)|编辑