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

📄 meetingmgframe.java

📁 实现网络会议室功能
💻 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 + -