UDP协议,接受发送方发来的图片,并显示出来
 
接受方:
import java.awt.*;
import java.awt.event.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class receive extends Frame implements ActionListener
{
Button bt;
DatagramSocket socket;
DatagramPacket pack;
byte[] buf ;
Image im;
    public receive()
   {
bt = new Button("获取图像");
add(bt,"North");
this.setSize(800, 600);
this.setVisible(true);
try
{
buf = new byte[1024];
socket = new DatagramSocket(6112);
pack = new DatagramPacket(buf,buf.length);
socket.receive(pack);
        im = this.getToolkit().createImage(pack.getData());
}
catch(Exception e)
{
e.printStackTrace();
}


bt.addActionListener(this);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
}

public void actionPerformed(ActionEvent e) 
{
repaint();
}
public void paint(Graphics g)
{
g.drawImage(im,0,0,null);
}
public static void main(String[] args)
{
new receive();
}}
发送方:import java.io.FileInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class send 
{
DatagramSocket socket;
DatagramPacket pack;
FileInputStream in;
byte[] buf ; public send()
{
try
{
buf = new byte[1024];
in = new FileInputStream("C:\\Documents and Settings\\Administrator\\桌面\\1.jpg");
in.read(buf);
socket = new DatagramSocket();
pack = new DatagramPacket(buf,buf.length,InetAddress .getLocalHost(),6112);
socket.send(pack);

}
catch(Exception e)
{
e.printStackTrace();
}

}
public static void main(String[] args)
{
new send();
}}

解决方案 »

  1.   

    im = this.getToolkit().createImage(pack.getData()); 这个方法是不是异步的?用这个方法的时候是不是还要同步的?
    或者你试试用其他窗口覆盖掉你这个窗口然后切换回这个窗口看看显示出来了没有。
      

  2.   

    看API的说明:
    public abstract class Toolkit
    extends Object此类是 Abstract Window Toolkit 的所有实际实现的抽象超类。Toolkit 的子类被用于将各种组件绑定到特定本机工具包实现。许多 GUI 操作可以异步执行。