注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

古城风~~~

竹密无妨溪水过,天高不碍白云飞。这天下总有一份是属于我古城的天地!

 
 
 

日志

 
 

广播数据包实例  

2008-09-12 23:24:12|  分类: java/jsp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

(1)广播站

package ccp330.gucheng.radiostation;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;

/*多播数据报套接字类用于发送和接收 IP 多播包。MulticastSocket 是一种 (UDP) DatagramSocket,它具有加入 Internet 上其他多播主机的“组”的附加功能。

多播组通过 D 类 IP 地址和标准 UDP 端口号指定。D 类 IP 地址在 224.0.0.0 和 239.255.255.255 的范围内(包括两者)。(即第一个字节的数字范围为224~239)地址 224.0.0.0 被保留,不应使用。

可以通过首先使用所需端口创建 MulticastSocket,然后调用 joinGroup(InetAddress groupAddr) 方法来加入多播组:
*/
public class RadioStation implements Runnable {

 private InetAddress address = null;
 private MulticastSocket serverSocket = null;
 private DatagramPacket dataMessage = null;
 private int serverPort = 3300;
 private String message = null;
 private int count = 0;
 private byte[] msn = null;
 
 public RadioStation(){
  try {
   address = InetAddress.getByName("239.255.45.88");
   serverSocket = new MulticastSocket(serverPort);
   serverSocket.joinGroup(address);
  } catch (UnknownHostException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  
 }

 public void run() {
  while(true){
   message = new String("~~~信息" + (++count) + "~~~");
   msn = message.getBytes();
   dataMessage = new DatagramPacket(msn, msn.length, address, serverPort);
   try {
    serverSocket.send(dataMessage);
    System.out.println("发送 :" + message);
    Thread.sleep(1000);
   } catch (IOException e) {
    e.printStackTrace();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
 
 
 
 public static void main(String[] args) {
  new Thread(new RadioStation()).start();
 }


}

 

(2)收听者

package ccp330.gucheng.radiostation;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
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.InetAddress;
import java.net.MulticastSocket;

public class RadioClient extends Frame implements ActionListener, Runnable {

 private static final long serialVersionUID = 1L;
 
 private static int count = 0;
 private Button run = null, stop = null;
 private TextArea area = null;
 private boolean runFlag = false;
 private Thread thread = null;
 
 private MulticastSocket clientSocket = null;
 private InetAddress address = null;
 private DatagramPacket messagePacket = null;
 private int port = 3300;
 private byte[] msn = new byte[1024];
 
 
 public RadioClient(String name){
  super(name);
  Panel p = new Panel();
  run = new Button("开始接收");
  run.addActionListener(this);
  stop = new Button("停止接收");
  stop.addActionListener(this);
  p.add(run);
  p.add(stop);
  this.add(p, BorderLayout.NORTH);
  
  area = new TextArea();
  this.add(area, BorderLayout.CENTER);
  
  this.addWindowListener(new WindowAdapter(){
   public void windowClosing(WindowEvent we){
    System.exit(0);
   }
  });
  //this.setBounds(200, 200, 600, 400);
  this.setSize(600, 400);
  this.setVisible(true);
 }
 
 public void actionPerformed(ActionEvent ae) {
  if(ae.getSource()==run){
   runFlag = true;
   //if(!thread.isAlive()){
    //原线程处于非活动状态,则创建一个新的线程
    thread = new Thread(this);
   //}
   thread.start();
  }
  if(ae.getSource() == stop){
   runFlag = false;
  }
 }

 public void run() {
  while(runFlag){
   //area.append("测试语句\n");
   try {
    address = InetAddress.getByName("239.255.45.88");
    clientSocket = new MulticastSocket(port);
    clientSocket.joinGroup(address);
    messagePacket =new DatagramPacket(msn, msn.length);
    clientSocket.receive(messagePacket);
    area.append("接收 :" + new String(messagePacket.getData(), 0, messagePacket.getLength()/*n*/) + "\n");
   } catch (IOException e) {
    e.printStackTrace();
   }
   
  }
 }

 

 public static void main(String[] args) {
  String client1= new String("客户 " + (++RadioClient.count));
  new RadioClient(client1).setLocation(100, 100);
  /*String client2= new String("客户 " + (++RadioClient.count));
  new RadioClient(client2).setLocation(400, 100);
  String client3= new String("客户 " + (++RadioClient.count));
  new RadioClient(client3).setLocation(700, 100);*/
 }

 
}

 

 

  评论这张
 
阅读(493)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017