⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receive.java

📁 java写的局域网广播系统.本软件包括2个部分:局域网广播系统——服务端
💻 JAVA
字号:
//
//
//***************************** 局域网广播系统--接收端 *******************************//
//
//******************************** java program **************************************//
//
//********************************   2004年11月  *************************************//
//
//********         作者:happy_zh  and  other partners     ***************************//

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.Timer;
import javax.swing.*;
import java.applet.*;

//定义一个Receive类
public class Receive extends JFrame implements Runnable,ActionListener
{ 
  int port;                                        
  InetAddress group=null;                          
  MulticastSocket socket=null;                     
  Button 开始接收,停止接收;               //定义按钮   
  TextArea 显示正在接收内容,显示已接收的内容,帮助文档;        //定义文本  
  Thread thread;                          //定义线程                                   
  boolean 停止=false;
  Color mycolor;                          //定义颜色

  JFrame aboutf;                          //定义一个有边框容器
 
  //帮助文档的界面
  JFrame helpf;
  TextArea helpt;
  FileReader input;
  String HelpContents="\n";

  //定义菜单栏
   MenuBar mb;
   Menu 文件;
   Menu 编辑; 
   Menu 帮助;

   MenuItem getout;
   MenuItem copys;
   MenuItem choses;
   MenuItem pastes;
   MenuItem helps;
   MenuItem abouts;
   String ss;
   String contents="";

   public void helppro(){

      try{            
                Process pro=Runtime.getRuntime().exec("cmd  /c BCReceivehelp.HTM");
		pro.waitFor();
		}catch(Exception e){
                JOptionPane.showMessageDialog(null,"有异常,请务必检查以排除异常。\n建议:请确定帮助文件存在和路径正确");                                                                                                //弹出infromation框提示有异常
		}
     }
    



    public void aboutpro(){                                           //“帮助”菜单的“关于我”的实现

      helpf=new JFrame("关于我");
      helpf.setBounds(250,200,450,350);   
      helpf.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);  //使jframe具有关闭功能     
      helpt=new TextArea(50,50);
       
      try {                                                           //从当前目录读取“BCReceivabout.txt”文件的内容
  		input=new FileReader("BCReceiveabout.txt");              
                BufferedReader br = new BufferedReader(input);      
                String s=br.readLine();
                while(s!=null)
		{  
		   HelpContents+=s;	   //用HelpContents把每次读到的一行行字符串连成原文的多行内容
                   HelpContents+="\n";	   		
		   s=br.readLine();		  
		}
		br.close();		
	  }catch(IOException ex){
 		System.out.println(ex);    //在dos里输出异常的内容
                JOptionPane.showMessageDialog(null,"有异常,请务必检查以排除异常。\n建议:请确定帮助文件存在和路径正确");                                                                                          //弹出infromation框提示有异常
      }
                helpt.setText( (String) HelpContents);                //显示的HelpContents即原文档的内容
      		helpt.setBackground(mycolor);                         //设置背景色
      		helpf.getContentPane().add(helpt);                    //jframe上add一个textarea
      		helpf.setVisible(true);      
   }

  public Receive()//定义构造函数
   { 
     super("局域网广播系统--接收端");      //父类的构造函数
     thread=new Thread(this);
 //设置菜单
     mb=new MenuBar();
     setMenuBar(mb);

   文件=new Menu(" 文 件 ");   
   编辑=new Menu(" 编 辑 ");
   帮助=new Menu(" 帮 助 ");
   

   getout=new MenuItem(" 退 出 ");

   getout.addActionListener(this);           //点击"退出"按钮就退出

   文件.add(getout);                         //把"退出"项加入"文件"菜单项中
   文件.addActionListener(this); 
   
   copys=new MenuItem(" 复 制 ");
   choses=new MenuItem(" 全 选 ");
   pastes=new MenuItem(" 粘 贴 ");
   copys.addActionListener(this);            //点击"粘贴"按钮则复制选中内容
   choses.addActionListener(this);
   pastes.addActionListener(this);
   编辑.add(copys);
   编辑.add(choses);
   编辑.add(pastes);
   编辑.addActionListener(this); 

   helps=new MenuItem(" 帮助主题 ");
   helps.addActionListener(this);
   abouts=new MenuItem("  关于我  ");
   abouts.addActionListener(this);
   帮助.add(helps);
   帮助.add(abouts);
   帮助.addActionListener(this); 

   mb.add(文件);
   mb.add(编辑);
   mb.setHelpMenu(帮助);

     开始接收=new Button("    开始接收    ");            //定义"开始接收"按钮
     停止接收=new Button("    停止接收    ");
     停止接收.addActionListener(this);           //监听"开始接收"的操作
     开始接收.addActionListener(this); 
     显示正在接收内容=new TextArea(4,30);        //创建一个7行30列的多行文本区域
     显示正在接收内容.setForeground(Color.blue); //将前景设为蓝色

    int r=191,g=211,b=249;
    mycolor=new Color(r,g,b);                    //设置自定义背景颜色
    显示正在接收内容.setBackground(mycolor);
    显示已接收的内容=new TextArea(23,30);

     Panel south=new Panel();                    //定义下方的两个按钮
     south.add(开始接收);
     south.add(停止接收);
     停止接收.setEnabled(false);                 //"停止接收"按钮在没有接收信息之前不可以被按动
     开始接收.setEnabled(true);                  //"开始接收"按钮在没有接收信息之前可以被按动
   getContentPane().add(south,BorderLayout.SOUTH);
   getContentPane().add(显示正在接收内容,"Center");          //在框中部显示正在接收的内容;
   getContentPane().add(显示已接收的内容,"North");           //在框上部显示已经接收的内容;
   显示已接收的内容.setBackground(mycolor);
   显示已接收的内容.setEditable(true);                       //将以接受内容属性设为可编辑状态
 
   validate();
   setBounds(200,100,600,520);                        //设置边框坐标为(200,100)宽600高520  
   setVisible(true);

     port=5000;                                       //端口                                     
     try{
         group=InetAddress.getByName("239.255.0.0");  //ip地址
         socket=new MulticastSocket(port);            //建立socket对象        
         socket.joinGroup(group);                     //联结网络端口组
                                            
       }
    catch(Exception e)//捕捉异常
       {
         JOptionPane.showMessageDialog(null,"有异常,请务必检查以排除异常。\n建议:请检查网络连接状态。");   
                                                                                             //弹出infromation框提示有异常
       } 

   addWindowListener(new WindowAdapter()              //监听窗口,若有关闭行为发生则退出
                     { public void windowClosing(WindowEvent e)
                       { System.exit(0);
      	               }
      	             });
                            
   }
  public void actionPerformed(ActionEvent e)          //当e事件发生时运行
   {
    if(e.getSource()==开始接收)                       //开始接收事件
      {
        if(!(thread.isAlive()))
           {
             thread=new Thread(this);
           }
        try
           {
             thread.start(); 
             停止=false; 
             停止接收.setEnabled(true);                //“停止接收”按钮可以被按动了
             开始接收.setEnabled(false);                //“开始接收”按钮不可以被按动
           }
        catch(Exception ee)                           //捕捉异常
           {
            JOptionPane.showMessageDialog(null,"有异常,请务必检查以排除异常。\n建议:可能是服务端没有进行广播,\n或可能是接收的开始和停止操作切换太频繁,以致于服务端的发送速度不能赶上您的操作。");   
                                                                                      //弹出infromation框提示有异常
          }
      }
    else if(e.getSource()==停止接收)                  //停止接收事件
      {
        thread.interrupt(); 
        停止=true; 
        停止接收.setEnabled(false);                //“停止接收”按钮可以被按动了
        开始接收.setEnabled(true);                //“开始接收”按钮不可以被按动
      }
   else if(e.getSource()==getout)                     //退出
     {
       System.exit(0);
     }
   else if(e.getSource()==copys)                      //复制已接受内容中被选中的部分
     {
       ss=显示已接收的内容.getSelectedText();
     }
   else if(e.getSource()==choses)                     //全选已接收的内容
     {      
       显示已接收的内容.selectAll();
     }
   else if(e.getSource()==pastes)                     //粘贴接在已接收内容后
     {      
       ss=contents+ss;                             //把选中的内容ss粘贴在已播放的内容contents的后面
						   //并且更新contents的内容
       显示已接收的内容.setText( (String) (ss));   
       contents=ss;  
     }
   else if(e.getSource()==helps)                      // 帮助信息
     {
        helppro();
     }
   else if(e.getSource()==abouts)                     //关于我们
     {
       aboutpro();
     }
   }

  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());

             //在下方的显示框里显示正在接收的内容
             显示正在接收内容.setText("\n正在接收的内容:\n\n"+message);

             //把新接收的内容接到已接收的内容后成为已接收的内容
             显示已接收的内容.append(message+"\n");
             contents=contents+message+"\n";
           }
      catch(Exception e)                               //捕捉异常
           {
             JOptionPane.showMessageDialog(null,"有异常,请务必检查以排除异常。\n建议:检查网络状态。");  
                                                                                          //弹出infromation框提示有异常
           }
      if(停止==true)                                   //如果要求停止则线程停止运行
           {
             break;
           } 
    } 
  }
 
 public static void main(String args[])                //主函数
 { 
    new Receive();                                     //定义一个Receive对象
 }
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -