(1)主机1:
import java.net.*;import java.awt.*; import java.awt.event.*;
 class Shanghai_Frame extends Frame implements Runnable,ActionListener
{ TextField out_message=new TextField("发送数据到北京:");
  TextArea in_message=new TextArea(); 
  Button b=new Button("发送数据包到北京");
  byte data[]=new byte[8192];
  DatagramPacket pack=null;
 Shanghai_Frame()
 { super("我是上海");
   setSize(200,200);
   setVisible(true);
   b.addActionListener(this);
   add(out_message,"South");
   add(in_message,"Center");
   add(b,"North");
   pack=new DatagramPacket(data,data.length);
   Thread thread=new Thread(this);
   thread.start();//线程负责接收数据包
 } //点击按扭发送数据包:
 public void actionPerformed(ActionEvent event)
 {byte buffer[]=out_message.getText().trim().getBytes();
   try{InetAddress address=InetAddress.getByName("localhost");
        //数据包的目标端口是888(那么收方(北京)需在这个端口接收):
DatagramPacket data_pack=
new DatagramPacket(buffer,buffer.length, address,888);
       DatagramSocket mail_data=new DatagramSocket();
       in_message.append("数据报目标主机地址:"+data_pack.getAddress()+"\n");
       in_message.append("数据报目标端口是:"+data_pack.getPort()+"\n");
       in_message.append("数据报长度:"+data_pack.getLength()+"\n");
       mail_data.send(data_pack);
      }
   catch(Exception e){}     
 } 
  //接收数据包:
 public void run()
 {DatagramSocket mail_data=null;
  try{//使用端口666来接收数据包(因为北京发来的数据报的目标端口是666)。
      mail_data=new DatagramSocket(666);
     }
  catch(Exception e){} 
  while(true)   
    { if(mail_data==null) break;
      else
      try{mail_data.receive(pack); 
          int length=pack.getLength(); //获取收到的数据的实际长度。
          InetAddress adress=pack.getAddress();//获取收到的数据包的始发地址。
          int port=pack.getPort();//获取收到的数据包的始发端口。
          String message=new String(pack.getData(),0,length);//获取收到的
//数据包中的数据。
            in_message.append("收到数据长度:"+length+"\n");
            in_message.append("收到数据来自:"+adress+"端口:"+port+"\n");
            in_message.append("收到数据是:"+message+"\n");
          
         }
      catch(Exception e){}
    } 
 }
}
public class Shanghai
{public static void main(String args[])
 { Shanghai_Frame shanghai_win=new Shanghai_Frame();
   shanghai_win.addWindowListener(new WindowAdapter()
     {public void windowClosing(WindowEvent e)
      {System.exit(0);
      }
     });
   shanghai_win.pack();
 }
} (2)主机2:
import java.net.*;import java.awt.*; import java.awt.event.*;
 class Beijing_Frame extends Frame implements Runnable,ActionListener
{ TextField out_message=new TextField("发送数据到上海:");
  TextArea in_message=new TextArea(); 
  Button b=new Button("发送数据包到上海");
  byte data[]=new byte[8192];
  DatagramPacket pack=null;
 Beijing_Frame()
 { super("我是北京"); 
   setSize(200,200);
   setVisible(true);
   b.addActionListener(this);
   add(out_message,"South");
   add(in_message,"Center");
   add(b,"North");
   pack=new DatagramPacket(data,data.length);//用来收取数据的数据包。
   Thread thread=new Thread(this);
    thread.start();//线程负责接收数据包
 }//点击按扭发送数据包:
 public void actionPerformed(ActionEvent event)
 {byte buffer[]=out_message.getText().trim().getBytes();
   try{InetAddress address=InetAddress.getByName("localhost");
        //数据包的目标端口是666(那么收方(上海)需在这个端口接收):
DatagramPacket data_pack=
new DatagramPacket(buffer,buffer.length, address,666);
       DatagramSocket mail_data=new DatagramSocket();
       in_message.append("数据报目标主机地址:"+data_pack.getAddress()+"\n");
       in_message.append("数据报目标端口是:"+data_pack.getPort()+"\n");
       in_message.append("数据报长度:"+data_pack.getLength()+"\n");
       mail_data.send(data_pack);
      }
   catch(Exception e){}   
 } 
public void run()
 {DatagramSocket mail_data=null;
  try{//使用端口888来接收数据包(因为上海发来的数据报的目标端口是888)。
      mail_data=new DatagramSocket(888);
     }
  catch(Exception e){} 
  while(true)   
    { if(mail_data==null) break;
      else
      try{  mail_data.receive(pack); 
            int length=pack.getLength(); //获取收到的数据的实际长度。
            InetAddress adress=pack.getAddress();//获取收到的数据包的始发地址。
            int port=pack.getPort();//获取收到的数据包的始发端口。
String message=new String(pack.getData(),0,length);//获取收到
//的数据包中的数据。
            in_message.append("收到数据长度:"+length+"\n");
            in_message.append("收到数据来自:"+adress+"端口:"+port+"\n");
            in_message.append("收到数据是:"+message+"\n");
          
         }
      catch(Exception e){}
    }
 }
}
public class Beijing
{public static void main(String args[])
 {Beijing_Frame beijing_win=new Beijing_Frame();
   beijing_win.addWindowListener(new WindowAdapter()
     {public void windowClosing(WindowEvent e)
      {System.exit(0);
      }
     });
   beijing_win.pack();
 }