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

📄 sendandrecievedatainmgframe.java

📁 实例45 选择字体 126 实例46 UDP与TCP/IP的简单应用 129 实例47 聊天室 131 实例48 浏览FTP 136 实例49 局域网广播 14
💻 JAVA
字号:
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;                  // 声明发送和接收数据所使用的DatagramPacket类

//构造窗体
public sendandrecievedataInMGFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK); 
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}

// 控件初始化
private void jbInit() throws Exception{
contentPane = (JPanel) this.getContentPane();            //设计窗体布局
textField1.setBounds(new Rectangle(88, 127, 240, 32)); 
contentPane.setLayout(null); 
this.setSize(new Dimension(400, 300)); 
this.setTitle("组播组中发送和接收数据");
button1.setLabel("发送数据");
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();
}
// 关闭窗体时退出
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e); 
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
        System.exit(0); 
    }
}

public void createMulticastGroupAndJoin()          // 创建一个组播组并加入此组的函数
{
try {
        port = 5000;                               // 设置组播组的监听端口为5000
        group = InetAddress.getByName("239.0.0.0");    // 设置组播组的地址为239.0.0.0
        socket = new MulticastSocket(port);   // 初始化MulticastSocket类并将端口号与之关联
        socket.setTimeToLive(1);                // 设置组播数据报的发送范围为本地网络
        socket.setSoTimeout(10000);             // 设置套接字的接收数据报的最长时间
        socket.joinGroup(group);              // 加入此组播组
        label2.setText("已加入地址为239.0.0.0的组播组");
}
    catch(Exception e1) {
        System.out.println("Error: " + e1);               // 捕捉异常情况
    }
}

public void sendData()                               // 向组播组发送数据的函数
{
try {
byte[] data = textField1.getText().getBytes(); // 将用户要发送的数据转换为字节形式并
// 存储在数组中
packet = new DatagramPacket(data, data.length, group, port); // 初始化DatagramPacket
socket.send(packet);         // 通过MulticastSocket实例端口向组播组发送数据
}
catch(Exception e1) 
{
System.out.println("Error: " + e1);                   // 捕捉异常情况
}
}

public String recieveData()                             // 从组播组接收数据的函数
{
String message; 
try {
packet.setData(new byte[512]);  // 设定接收数据的DatagramPacket实例的数组大小
packet.setLength(512);   // 设定接收数据的DatagramPacket实例的长度
socket.receive(packet);       // 通过MulticastSocket实例端口从组播组接收数据
// 将接受的数据转换成字符串形式
}
catch(Exception e1) {
System.out.println("Error: " + e1);                   // 捕捉异常情况
message = "Error: " + e1; 
}
return message; 
}

// 按钮1事件处理
void button1_actionPerformed(ActionEvent e) {
sendData();                                             // 首先向组播组发送数据
String message = recieveData();                         // 然后从组播组接受此数据
label1.setText("Data recieved: '" + message + "'");     // 本机显示接收到的数据
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -