?? meetingmgframe.java
字號:
package meeting;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;class Listener extends Thread{//用來監(jiān)聽端口消息的線程 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){//不斷的監(jiān)測端口是否有新的消息 try { packet.setData(new byte[512]); //設(shè)定接收數(shù)據(jù)的DatagramPacket實(shí)例的數(shù)組大小 packet.setLength(512); //設(shè)定接收數(shù)據(jù)的DatagramPacket實(shí)例的長度 socket.receive(packet); //通過MulticastSocket實(shí)例端口從組播組接收數(shù)據(jù) message = new String(packet.getData(), 0, packet.getLength()); //將接受的數(shù)據(jù)轉(zhuǎn)換成字符串形式 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();//輸入要發(fā)送的消息 private TextField textField2 = new TextField();//輸入組播組地址 private TextField textField3 = new TextField();//輸入用戶名 private Button button1 = new Button();//發(fā)送消息按鈕 private Button button2 = new Button();//進(jìn)入組播組按鈕 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; //聲明發(fā)送和接收數(shù)據(jù)所使用的DatagramPacket類 String user = new String(); //聲明用戶名 boolean connected = false; //是否連接的標(biāo)志符 public MeetingMGFrame() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { toInit(); } catch(Exception e) { e.printStackTrace(); } } private void toInit() throws Exception {//初始化窗體 contentPane = (JPanel) this.getContentPane(); //設(shè)計(jì)窗體布局 contentPane.setLayout(null); this.setSize(new Dimension(400, 400)); this.setTitle("組播實(shí)現(xiàn)網(wǎng)絡(luò)會議"); 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("發(fā)送消息"); 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("進(jìn)入會議"); 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() //創(chuàng)建一個(gè)組播組并加入該組 { 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; //設(shè)置組播組的監(jiān)聽端口 group = InetAddress.getByName(textField2.getText()); //設(shè)置組播組的地址為224.0.0.1 socket = new MulticastSocket(port); //初始化MulticastSocket類并將端口號與之關(guān)聯(lián) socket.joinGroup(group); //加入此組播組 label2.setText("進(jìn)入組播組:"); //提示已經(jīng)進(jìn)入組播組 connected = true; } catch(Exception e1) { System.out.println("Error1: " + e1); //捕捉異常情況 } byte[] data = new byte[512]; packet = new DatagramPacket(data, data.length, group, port); //初始化DatagramPacket的實(shí)例 try { String str = new String(); str = user +"進(jìn)入組播組:" + textField2.getText(); //字符串形式的用戶進(jìn)入組的消息 data = str.getBytes(); //將所要發(fā)送的數(shù)據(jù)轉(zhuǎn)換為字節(jié)形式并存儲在數(shù)組中 packet.setData(data); //將字節(jié)形式的消息放入packet socket.send(packet); //通過MulticastSocket實(shí)例端口向組播組發(fā)送數(shù)據(jù) } catch(Exception e) { System.out.println("Error2:" + e); } Listener listener = new Listener(socket,textArea1); //初始化偵聽端口用的線程 listener.start(); //激活線程 }//end of if else{ textArea1.setText("請確認(rèn)輸入組播組的ip地址和您的用戶名"); } } public void sendData() //向組播組發(fā)送數(shù)據(jù)的函數(shù) { try { String str = new String(); str = user +":" + textField1.getText(); byte[] data = str.getBytes(); //將用戶所要發(fā)送的數(shù)據(jù)轉(zhuǎn)換為字節(jié)形式并存儲在數(shù)組中 packet.setData(data); //將字節(jié)形式的消息放入packet socket.send(packet); //通過MulticastSocket實(shí)例端口向組播組發(fā)送數(shù)據(jù) } catch(Exception e1) { System.out.println("Error3: " + e1); //捕捉異常情況 } } void button1_actionPerformed(ActionEvent e) { sendData(); //向組播組發(fā)送數(shù)據(jù) } void button2_actionPerformed(ActionEvent e){ if(!connected){ createMulticastGroupAndJoin(); } else{ textArea1.append("\n已經(jīng)建立連接,請發(fā)送消息"); } }}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -