📄 meetingmgframe.java
字号:
package meeting;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;class Listener extends Thread{//用来监听端口消息的线程 DatagramPacket packet; MulticastSocket socket; TextArea textArea; Listener(MulticastSocket socket1,TextArea textArea1){ byte[] data = new byte[512]; packet = new DatagramPacket(data,data.length); socket = socket1; textArea = textArea1; } public void run(){ String message; while(true){//不断的监测端口是否有新的消息 try { packet.setData(new byte[512]); //设定接收数据的DatagramPacket实例的数组大小 packet.setLength(512); //设定接收数据的DatagramPacket实例的长度 socket.receive(packet); //通过MulticastSocket实例端口从组播组接收数据 message = new String(packet.getData(), 0, packet.getLength()); //将接受的数据转换成字符串形式 textArea.append("\n" + message); } catch(Exception e1) { System.out.println("no new message,please wait" ); //捕捉异常情况 } } }}public class MeetingMGFrame extends JFrame{ private JPanel contentPane; private TextField textField1 = new TextField();//输入要发送的消息 private TextField textField2 = new TextField();//输入组播组地址 private TextField textField3 = new TextField();//输入用户名 private Button button1 = new Button();//发送消息按钮 private Button button2 = new Button();//进入组播组按钮 private Label label1 = new Label();//提示输入消息 private Label label2 = new Label();//显示组播组信息 private Label label3 = new Label();//提示输入用户名 private TextArea textArea1 = new TextArea();//显示组播组传来的消息 int port; //声明组播使用的端口 MulticastSocket socket; //声明建立组播组使用的MulticastSocket类 InetAddress group; //声明建立组播组使用的组播组地址 DatagramPacket packet; //声明发送和接收数据所使用的DatagramPacket类 String user = new String(); //声明用户名 boolean connected = false; //是否连接的标志符 public MeetingMGFrame() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { toInit(); } catch(Exception e) { e.printStackTrace(); } } private void toInit() throws Exception {//初始化窗体 contentPane = (JPanel) this.getContentPane(); //设计窗体布局 contentPane.setLayout(null); this.setSize(new Dimension(400, 400)); this.setTitle("组播实现网络会议"); textField1.setBounds(new Rectangle(90,260,200,20)); textField2.setBounds(new Rectangle(90,20,65,20)); textField3.setBounds(new Rectangle(210,20,80,20)); textField2.setText("224.0.0.1"); label1.setBounds(new Rectangle(20, 260, 60, 20)); label2.setBounds(new Rectangle(10, 20, 60, 20)); label3.setBounds(new Rectangle(160,20,40,20)); label1.setText("输入消息:"); label2.setText("输入组播组ip:"); label3.setText("用户名"); textArea1.setBounds(new Rectangle(20,60,320,180)); textArea1.setEditable(false); button1.setLabel("发送消息"); button1.setBounds(new Rectangle(300, 260, 60, 20)); button1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { button1_actionPerformed(e); } }); button2.setLabel("进入会议"); button2.setBounds(new Rectangle(300, 20, 60, 20)); button2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { button2_actionPerformed(e); } }); contentPane.add(textField1, null); contentPane.add(textField2,null); contentPane.add(textField3,null); contentPane.add(button1, null); contentPane.add(button2,null); contentPane.add(label1, null); contentPane.add(label2,null); contentPane.add(label3,null); contentPane.add(textArea1,null); } protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } public void createMulticastGroupAndJoin() //创建一个组播组并加入该组 { String str1 = new String(); String str2 = new String(); str1 = textField2.getText(); str2 = textField3.getText(); if(str1.compareTo("") != 0 && str2.compareTo("") != 0 ){ try { user = str2; //获取用户名 port = 1234; //设置组播组的监听端口 group = InetAddress.getByName(textField2.getText()); //设置组播组的地址为224.0.0.1 socket = new MulticastSocket(port); //初始化MulticastSocket类并将端口号与之关联 socket.joinGroup(group); //加入此组播组 label2.setText("进入组播组:"); //提示已经进入组播组 connected = true; } catch(Exception e1) { System.out.println("Error1: " + e1); //捕捉异常情况 } byte[] data = new byte[512]; packet = new DatagramPacket(data, data.length, group, port); //初始化DatagramPacket的实例 try { String str = new String(); str = user +"进入组播组:" + textField2.getText(); //字符串形式的用户进入组的消息 data = str.getBytes(); //将所要发送的数据转换为字节形式并存储在数组中 packet.setData(data); //将字节形式的消息放入packet socket.send(packet); //通过MulticastSocket实例端口向组播组发送数据 } catch(Exception e) { System.out.println("Error2:" + e); } Listener listener = new Listener(socket,textArea1); //初始化侦听端口用的线程 listener.start(); //激活线程 }//end of if else{ textArea1.setText("请确认输入组播组的ip地址和您的用户名"); } } public void sendData() //向组播组发送数据的函数 { try { String str = new String(); str = user +":" + textField1.getText(); byte[] data = str.getBytes(); //将用户所要发送的数据转换为字节形式并存储在数组中 packet.setData(data); //将字节形式的消息放入packet socket.send(packet); //通过MulticastSocket实例端口向组播组发送数据 } catch(Exception e1) { System.out.println("Error3: " + e1); //捕捉异常情况 } } void button1_actionPerformed(ActionEvent e) { sendData(); //向组播组发送数据 } void button2_actionPerformed(ActionEvent e){ if(!connected){ createMulticastGroupAndJoin(); } else{ textArea1.append("\n已经建立连接,请发送消息"); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -