s11_8;

本文介绍了一个简单的Java程序,演示了如何使用UDP协议在北京和上海两个虚拟节点之间进行数据包发送与接收。通过创建两个窗口界面,用户可以在两地之间互相发送消息,并实时查看发送和接收的数据详情。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 package itat.s11_8;

import java.awt.Button;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class Beijing {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Beijing_Frame beijing_win=new Beijing_Frame();
  beijing_win.addWindowListener(new WindowAdapter(){
   public void windowClosing(WindowEvent e){
   System.exit(0);
   }
  });
  beijing_win.validate();
 }

}
class Beijing_Frame extends Frame implements Runnable,ActionListener{


 TextField out_message=new TextField("发送数据到上海:");
 TextArea in_message=new TextArea();
 Button b=new Button("发送数据包到上海");
 Beijing_Frame(){
  super("我是北京");
  setSize(200,200);
  setVisible(true);
  b.addActionListener(this);
  add(out_message,"South");
  add(in_message,"Center");
  add(b,"North");
  Thread thread=new Thread(this);
  thread.start();
 }
 
 
 public void run() {
  // TODO Auto-generated method stub
  DatagramPacket pack=null;
  DatagramSocket mail_data=null;
  byte data[]=new byte[8192];
  pack=new DatagramPacket(data,data.length);
  try {
   mail_data=new DatagramSocket(888);
  } catch (SocketException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  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 (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
  }
  
 }


 public void actionPerformed(ActionEvent e) {
  // TODO Auto-generated method stub
  byte buffer[]=out_message.getText().trim().getBytes();
  try {
   InetAddress address=InetAddress.getByName("127.0.0.1");
   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 (UnknownHostException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  } catch (SocketException eh) {
   // TODO Auto-generated catch block
   eh.printStackTrace();
  } catch (IOException ae) {
   // TODO Auto-generated catch block
   ae.printStackTrace();
  }
  
 }

 
}

 

package itat.s11_8;

import java.awt.Button;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class Shanghai {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub

  Shanghai_Frame shanghai_win=new Shanghai_Frame();
  shanghai_win.addWindowListener(new WindowAdapter(){
   public void windowClosing(WindowEvent e){
   System.exit(0);
   }
  });
  shanghai_win.validate();
 }

}
class Shanghai_Frame extends Frame implements Runnable,ActionListener{


 TextField out_message=new TextField("发送数据到北京:");
 TextArea in_message=new TextArea();
 Button b=new Button("发送数据包到北京");
 Shanghai_Frame(){
  super("我是上海");
  setSize(200,200);
  setVisible(true);
  b.addActionListener(this);
  add(out_message,"South");
  add(in_message,"Center");
  add(b,"North");
  Thread thread=new Thread(this);
  thread.start();
 }
 
 
 public void run() {
  // TODO Auto-generated method stub
  DatagramPacket pack=null;
  DatagramSocket mail_data=null;
  byte data[]=new byte[8192];
  pack=new DatagramPacket(data,data.length);
  try {
   
   mail_data=new DatagramSocket(666);
  } catch (SocketException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  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 (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
  }
  
 }


 public void actionPerformed(ActionEvent e) {
  // TODO Auto-generated method stub
  byte buffer[]=out_message.getText().trim().getBytes();
  try {
   InetAddress address=InetAddress.getByName("127.0.0.1");
   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 (UnknownHostException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  } catch (SocketException eh) {
   // TODO Auto-generated catch block
   eh.printStackTrace();
  } catch (IOException ae) {
   // TODO Auto-generated catch block
   ae.printStackTrace();
  }
  
 }

 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值