📄 receive.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 + -