?? sendandrecievedatainmgframe.java
字號(hào):
package sendandrecievedata;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
public class sendandrecievedataInMGFrame extends JFrame {
private JPanel contentPane;
private TextField textField1 = new TextField();
private Button button1 = new Button();
private Label label1 = new Label();
private Label label2 = new Label();
int port; // 聲明組播使用的端口
MulticastSocket socket; // 聲明建立組播組使用的MulticastSocket類
InetAddress group; // 聲明建立組播組使用的組播組地址
DatagramPacket packet; // 聲明發(fā)送和接收數(shù)據(jù)所使用的DatagramPacket類
//構(gòu)造窗體
public sendandrecievedataInMGFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
// 控件初始化
private void jbInit() throws Exception{
contentPane = (JPanel) this.getContentPane(); //設(shè)計(jì)窗體布局
textField1.setBounds(new Rectangle(88, 127, 240, 32));
contentPane.setLayout(null);
this.setSize(new Dimension(400, 300));
this.setTitle("組播組中發(fā)送和接收數(shù)據(jù)");
button1.setLabel("發(fā)送數(shù)據(jù)");
button1.setBounds(new Rectangle(166, 186, 88, 29));
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button1_actionPerformed(e);
}
});
label1.setBounds(new Rectangle(88, 84, 240, 32));
label2.setBounds(new Rectangle(88, 41, 220, 32));
contentPane.add(textField1, null);
contentPane.add(button1, null);
contentPane.add(label1, null);
contentPane.add(label2, null);
createMulticastGroupAndJoin();
}
// 關(guān)閉窗體時(shí)退出
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
public void createMulticastGroupAndJoin() // 創(chuàng)建一個(gè)組播組并加入此組的函數(shù)
{
try {
port = 5000; // 設(shè)置組播組的監(jiān)聽端口為5000
group = InetAddress.getByName("239.0.0.0"); // 設(shè)置組播組的地址為239.0.0.0
socket = new MulticastSocket(port); // 初始化MulticastSocket類并將端口號(hào)與之關(guān)聯(lián)
socket.setTimeToLive(1); // 設(shè)置組播數(shù)據(jù)報(bào)的發(fā)送范圍為本地網(wǎng)絡(luò)
socket.setSoTimeout(10000); // 設(shè)置套接字的接收數(shù)據(jù)報(bào)的最長時(shí)間
socket.joinGroup(group); // 加入此組播組
label2.setText("已加入地址為239.0.0.0的組播組");
}
catch(Exception e1) {
System.out.println("Error: " + e1); // 捕捉異常情況
}
}
public void sendData() // 向組播組發(fā)送數(shù)據(jù)的函數(shù)
{
try {
byte[] data = textField1.getText().getBytes(); // 將用戶要發(fā)送的數(shù)據(jù)轉(zhuǎn)換為字節(jié)形式并
// 存儲(chǔ)在數(shù)組中
packet = new DatagramPacket(data, data.length, group, port); // 初始化DatagramPacket
socket.send(packet); // 通過MulticastSocket實(shí)例端口向組播組發(fā)送數(shù)據(jù)
}
catch(Exception e1)
{
System.out.println("Error: " + e1); // 捕捉異常情況
}
}
public String recieveData() // 從組播組接收數(shù)據(jù)的函數(shù)
{
String message;
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ù)
// 將接受的數(shù)據(jù)轉(zhuǎn)換成字符串形式
}
catch(Exception e1) {
System.out.println("Error: " + e1); // 捕捉異常情況
message = "Error: " + e1;
}
return message;
}
// 按鈕1事件處理
void button1_actionPerformed(ActionEvent e) {
sendData(); // 首先向組播組發(fā)送數(shù)據(jù)
String message = recieveData(); // 然后從組播組接受此數(shù)據(jù)
label1.setText("Data recieved: '" + message + "'"); // 本機(jī)顯示接收到的數(shù)據(jù)
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -