UDP广播 java (netbeans)

客户端:

/*
 * ReceiveFrame.java
 *
 * Created on 2006年5月25日, 上午9:28
 */

package broadcastreceive;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;

/**
 *
 * @author  Terry
 */
public class ReceiveFrame extends javax.swing.JFrame implements Runnable
{
   
    /** Creates new form ReceiveFrame */
    public ReceiveFrame()
    {
        initComponents();
        thread = new Thread(this);
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" 生成的代码 ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jScrollPaneforText = new javax.swing.JScrollPane();
        jTextAreaInfo = new javax.swing.JTextArea();
        jButtonReceive = new javax.swing.JButton();
        jButtonStop = new javax.swing.JButton();
        jLabelInfo = new javax.swing.JLabel();
        jLabelIp = new javax.swing.JLabel();
        jTextFieldIp = new javax.swing.JTextField();
        jTextFieldPort = new javax.swing.JTextField();
        jLabelPort = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("/u5e7f/u64ad/u5ba2/u6237/u7aef");
        jTextAreaInfo.setColumns(20);
        jTextAreaInfo.setRows(5);
        jScrollPaneforText.setViewportView(jTextAreaInfo);

        jButtonReceive.setText("/u63a5/u6536/u5e7f/u64ad");
        jButtonReceive.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonReceiveActionPerformed(evt);
            }
        });

        jButtonStop.setText("/u505c/u6b62/u63a5/u53d7");
        jButtonStop.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonStopActionPerformed(evt);
            }
        });

        jLabelInfo.setText("/u63a5/u53d7/u5230/u7684/u5e7f/u64ad/u4fe1/u606f");

        jLabelIp.setText("/u5e7f/u64ad/u5730/u5740");

        jTextFieldIp.setText("239.255.8.9");

        jTextFieldPort.setText("5858");

        jLabelPort.setText("/u7aef/u53e3");

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(19, 19, 19)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jLabelInfo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 129, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(layout.createSequentialGroup()
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                            .add(jScrollPaneforText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 303, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(layout.createSequentialGroup()
                                .add(jLabelIp, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                                .add(jTextFieldIp, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 191, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .add(jLabelPort)))
                        .add(18, 18, 18)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(jTextFieldPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 73, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                            .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                                .add(jButtonStop)
                                .add(jButtonReceive)))))
                .addContainerGap(19, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .add(32, 32, 32)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jLabelIp, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 23, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jTextFieldIp, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 22, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jLabelPort)
                    .add(jTextFieldPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 33, Short.MAX_VALUE)
                .add(jLabelInfo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 24, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                        .add(jButtonReceive, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 35, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(88, 88, 88)
                        .add(jButtonStop, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 35, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(29, 29, 29))
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                        .add(jScrollPaneforText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 223, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())))
        );
        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButtonStopActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonStopActionPerformed
// TODO 将在此处添加您的处理代码:
        stop = true;
    }//GEN-LAST:event_jButtonStopActionPerformed
    //接受按钮事件
    private void jButtonReceiveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonReceiveActionPerformed
// TODO 将在此处添加您的处理代码:
        try
        {
            port = Integer.parseInt(jTextFieldPort.getText());     //得到端口号
            group = InetAddress.getByName(jTextFieldIp.getText()); //得到组播地址
            socket = new MulticastSocket(port);
            socket.joinGroup(group);                                //加入组播组
        }
        catch(Exception e)
        {
        }
        if (!(thread.isAlive()))
        {
            thread = new Thread(this);
            stop = false;
        }
        try
        {
            thread.start();
        }
        catch(Exception ee){}
    }//GEN-LAST:event_jButtonReceiveActionPerformed
   
    /**
     * @param args the command line arguments
     */
    public void run()
   {
        while(true)
 {
  byte data[] = new byte[8192];
  DatagramPacket packet = null;
  packet=new DatagramPacket(data,data.length,group,port);
  try
  {
   socket.receive(packet);
   String message = new String(packet.getData(),0,packet.getLength());
   jTextAreaInfo.append("/n"+message);
   jTextAreaInfo.setCaretPosition(jTextAreaInfo.getText().length());
  }
  catch(Exception e){}
  if (stop == true)
  {
   break;
  }
 }
   }
    // 变量声明 - 不进行修改//GEN-BEGIN:variables
    private javax.swing.JButton jButtonReceive;
    private javax.swing.JButton jButtonStop;
    private javax.swing.JLabel jLabelInfo;
    private javax.swing.JLabel jLabelIp;
    private javax.swing.JLabel jLabelPort;
    private javax.swing.JScrollPane jScrollPaneforText;
    private javax.swing.JTextArea jTextAreaInfo;
    private javax.swing.JTextField jTextFieldIp;
    private javax.swing.JTextField jTextFieldPort;
    // 变量声明结束//GEN-END:variables
    //自己声明的变量
    int port;                      //组播的端口
    InetAddress group;             //组播地址
    MulticastSocket socket;        //多点组播套接字
    Thread thread;                 //负责接受的线程
    boolean stop;
}

服务器端:

/*
 * SendFrame.java
 *
 * Created on 2006年5月24日, 下午4:28
 */

package netbroadcasting;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.net.*;
import java.net.DatagramSocket;
import java.lang.*;


/**
 *
 * @author Terry
 */
public class SendFrame extends javax.swing.JFrame
{
   
    /** Creates new form SendFrame */
    public SendFrame() //构造方法
    {
        initComponents();                    //制造窗体的方法
        setValue();                           //设置各个变量的值
        InetAddress group=null;               //设置组播放组
        MulticastSocket socket=null;          //多点广播套接字
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" 生成的代码 ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jDialogError = new javax.swing.JDialog();
        jTextFieldIPadderss = new javax.swing.JTextField();
        jLabelIp = new javax.swing.JLabel();
        jLabelInfo = new javax.swing.JLabel();
        jScrollPaneContainer = new javax.swing.JScrollPane();
        jTextAreaSendInfo = new javax.swing.JTextArea();
        jButtonSend = new javax.swing.JButton();
        jLabePort = new javax.swing.JLabel();
        jTextFieldPort = new javax.swing.JTextField();

        jDialogError.setTitle("/u8f93/u5165/u9519/u8bef");
        org.jdesktop.layout.GroupLayout jDialogErrorLayout = new org.jdesktop.layout.GroupLayout(jDialogError.getContentPane());
        jDialogError.getContentPane().setLayout(jDialogErrorLayout);
        jDialogErrorLayout.setHorizontalGroup(
            jDialogErrorLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 400, Short.MAX_VALUE)
        );
        jDialogErrorLayout.setVerticalGroup(
            jDialogErrorLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(0, 300, Short.MAX_VALUE)
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("/u5e7f/u64ad/u4e3b/u673a");
        jTextFieldIPadderss.setText("239.255.8.9");
        jTextFieldIPadderss.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextFieldIPadderssActionPerformed(evt);
            }
        });

        jLabelIp.setText("/u4e3b/u673aIP");

        jLabelInfo.setText("/u8f93/u5165/u8981/u53d1/u9001/u7684/u4fe1/u606f");

        jTextAreaSendInfo.setColumns(20);
        jTextAreaSendInfo.setRows(5);
        jScrollPaneContainer.setViewportView(jTextAreaSendInfo);

        jButtonSend.setText("/u53d1/u9001/u6d88/u606f");
        jButtonSend.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonSendActionPerformed(evt);
            }
        });

        jLabePort.setText("/u7aef/u53e3");

        jTextFieldPort.setText("5858");

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(28, 28, 28)
                .add(jLabelIp)
                .add(32, 32, 32)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jScrollPaneContainer)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jLabelInfo)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
                        .add(jTextFieldIPadderss, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 151, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .add(jLabePort)
                        .add(19, 19, 19)))
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jTextFieldPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 40, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                    .add(layout.createSequentialGroup()
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jButtonSend)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(48, 48, 48)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jTextFieldIPadderss, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 29, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jLabePort)
                    .add(jTextFieldPort, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 28, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jLabelIp, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 32, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jLabelInfo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 27, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jScrollPaneContainer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 128, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                    .add(layout.createSequentialGroup()
                        .add(144, 144, 144)
                        .add(jButtonSend)))
                .addContainerGap(42, Short.MAX_VALUE))
        );

        layout.linkSize(new java.awt.Component[] {jLabePort, jLabelIp, jTextFieldIPadderss, jTextFieldPort}, org.jdesktop.layout.GroupLayout.VERTICAL);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jTextFieldIPadderssActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextFieldIPadderssActionPerformed
// TODO 将在此处添加您的处理代码:
    }//GEN-LAST:event_jTextFieldIPadderssActionPerformed
    public void setValue()
    {
        saveInfo = new String("");
        saveIp = new String("");
    }   
//按钮事件
    private void jButtonSendActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSendActionPerformed
// TODO 将在此处添加您的处理代码:
        saveInfo = jTextAreaSendInfo.getText(); 
        saveIp = jTextFieldIPadderss.getText();
        port = Integer.parseInt(jTextFieldPort.getText());    //得到端口号
        try
        {
            group = InetAddress.getByName(saveIp);
            socket = new MulticastSocket(port);              //设置端口
            socket.setTimeToLive(0);                         //多点广播套接字数据报为本地网络地址
            socket.joinGroup(group);                         //加入广播组
        }
        catch(Exception e){}
        try
        {
            DatagramPacket packet = null;   //等待广播的数据报
            byte data[] = saveInfo.getBytes();
            packet = new DatagramPacket(data,data.length,group,port);
            socket.send(packet);            //发送数据报          
         }
         catch(Exception e){}
    }//GEN-LAST:event_jButtonSendActionPerformed
   
    /**
     * @param args the command line arguments
     */

   
    // 变量声明 - 不进行修改//GEN-BEGIN:variables
    private javax.swing.JButton jButtonSend;
    private javax.swing.JDialog jDialogError;
    private javax.swing.JLabel jLabePort;
    private javax.swing.JLabel jLabelInfo;
    private javax.swing.JLabel jLabelIp;
    private javax.swing.JScrollPane jScrollPaneContainer;
    private javax.swing.JTextArea jTextAreaSendInfo;
    private javax.swing.JTextField jTextFieldIPadderss;
    private javax.swing.JTextField jTextFieldPort;
    // 变量声明结束//GEN-END:variables
    String saveInfo;                 //用于保存发送信息的变量
    String saveIp;                   //保存网段IP地址的变量
    int port;
    InetAddress group;               //设置组播放组
    MulticastSocket socket;          //多点广播套接字
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值