【快速入门-简单实现】使用Java实现的单播、组播和广播

说明

TCP是一个面向连接的协议,TCP一定是点对点的,一点是两个主机来建立连接的,基于TCP实现的肯定是单播(但单播还可以使用UDP协议实现)。只有UDP才会使用广播和组播。
Java中的单播、组播和广播可以使用TCP或UDP协议来实现,具体取决于应用程序的需求和设计。

  • 对于单播,在Java中使用TCP协议来实现对点之间的通信,使用UDP协议来实现实时性要求高、数据量小、可靠性要求不高的对点之间的通信。
  • 对于组播,在Java中常使用UDP协议来实现组播。组播是将数据包从一个源节点传送到一组目标节点,可以更有效的利用网络带宽。
  • 对于广播,在Java中使用UDP协议来实现广播。广播是将数据包从一个源节点传送到所有的目标节点,可以在局域网中快速的传输信息。

使用Java实现单播

使用TCP实现单播

服务端

import java.net.*;
import java.io.*;

/**
 * Java实现单播
 * 服务端
 */
public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            Socket socket = serverSocket.accept();
            System.out.println("连接客户端成功");

            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

            String message = in.readLine();
            System.out.println("收到客户端消息: " + message);

            System.out.println("你好,客户端。");

            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端

import java.net.*;
import java.io.*;

/**
 * 客户端
 */
public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8888);
            System.out.println("连接服务端成功");

            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

            System.out.println("你好,服务端。");

            String message = in.readLine();
            System.out.println("收到服务端消息: " + message);

            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

先启动服务端,再启动客户端。
结果打印:
服务端
在这里插入图片描述

客户端
在这里插入图片描述

使用UDP实现单播

接收端

import java.net.*;

public class UnicastReceiver {

    public static void main(String[] args) {
        try {
            // 创建UDP套接字并指定端口号
            DatagramSocket socket = new DatagramSocket(9999);
            // 创建UDP数据包缓冲区
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
            // 接收数据包
            socket.receive(packet);
            // 输出数据包内容
            String message = new String(packet.getData());
            System.out.println("收到消息: " + message);
            // 关闭UDP套接字
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

发送端

import java.net.*;

public class UnicastSender {

    public static void main(String[] args) {
        try {
            // 创建UDP套接字
            DatagramSocket socket = new DatagramSocket();
            // 准备要发送的数据
            String message = "你好,接收端。";
            byte[] data = message.getBytes();
            // 接收方IP地址
            InetAddress address = InetAddress.getByName("127.0.0.1");
            // 接收方端口号
            int port = 9999;
            // 创建UDP数据包
            DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
            // 发送数据
            socket.send(packet);
            // 关闭UDP套接字
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

先启动接收端,再启动发送端。
执行结果如下:
在这里插入图片描述

使用Java实现UDP组播

TCP是点对点的,所以实现组播得使用UDP协议
接收端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class MulticastReceiver {
    public static void main(String[] args) {
        try {
            // 创建一个组播地址
            InetAddress group = InetAddress.getByName("224.0.0.1");

            // 创建一个组播套接字并加入组
            MulticastSocket multicastSocket = new MulticastSocket(8888);
            multicastSocket.joinGroup(group);

            // 接收数据
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
            multicastSocket.receive(packet);
            String message = new String(buffer, 0, packet.getLength());
            System.out.println("收到消息: " + message);

            // 关闭套接字
            multicastSocket.leaveGroup(group);
            multicastSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

发送端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class MulticastSender {
    public static void main(String[] args) {
        try {
            // 创建一个组播地址
            InetAddress group = InetAddress.getByName("224.0.0.1");

            // 创建一个组播套接字
            MulticastSocket multicastSocket = new MulticastSocket();

            // 发送数据
            byte[] data = "Hello, 组播!".getBytes();
            DatagramPacket packet = new DatagramPacket(data, data.length, group, 8888);
            multicastSocket.send(packet);

            // 关闭套接字
            multicastSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

先启动接收端,再启动发送端。
执行结果如下:
在这里插入图片描述

使用Java实现UDP广播

发送端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * 广播
 * 服务端
 */
public class UdpBroadcastServer {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket();

        String message = "这是一条广播!";
        byte[] data = message.getBytes();
        /*我们使用的目标地址是 255.255.255.255,这个地址表示广播给本地网络中所有的设备。*/
        InetAddress address = InetAddress.getByName("255.255.255.255");
        DatagramPacket packet = new DatagramPacket(data, data.length, address, 8888);
        socket.send(packet);
        System.out.println("发送消息: " + message);

        socket.close();
    }
}

接收端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
 * 客户端
 */
public class UdpBroadcastClient {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(8888);

        byte[] data = new byte[1024];
        DatagramPacket packet = new DatagramPacket(data, data.length);
        socket.receive(packet);
        String message = new String(packet.getData(), 0, packet.getLength());
        System.out.println("收到消息: " + message);
        socket.close();
    }
}

先启动接收端,再启动发送端
打印结果如下:
在这里插入图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要快速入门Android应用开发,首先需要掌握以下几个方面: 1. Java基础知识:Android应用开发使用Java语言编写,所以需要先学习Java基础知识,包括数据类型、变量、运算符、控制语句等。 2. Android开发环境:下载并安装Android Studio集成开发环境,安装好后可以创建Android项目并进行开发。学习使用Android Studio的各种功能和设置。 3. Android应用架构:了解Android应用的架构,包括Activity、Service、Broadcast Receiver和Content Provider四大组件,了解它们的作用和使用方法。 4. Android界面设计:Android应用的界面设计需要使用XML布局文件编写,学习使用Android Studio自带的布局设计工具和相关属性,能够实现简单的界面设计。 5. Android应用开发流程:学习了解Android应用的开发流程,包括界面设计、数据处理、写入和读取数据、调试和测试等。 6. Android应用调试与测试:掌握Android应用的调试和测试方法,包括使用模拟器和真机测试、使用logcat查看日志等。 除此之外,还可以参与一些在线课程或社区,多看文档和视频,不断练习和尝试。在开发过程中也要学会团队协作,积极参与开源社区,分享经验和技巧,不断交流和学习。让自己的开发技能更进一步。 ### 回答2: Android应用开发是一个非常有趣的领域,越来越多的人开始学习并进行开发。那么如何快速入门android应用开发呢? 1. 学习Java语言基础知识:Android应用是基于Java语言开发的,掌握Java语言基础是快速入门Android应用开发的关键。 2. 下载并掌握Android Studio:这是一款专门用于Android应用开发的IDE,它提供丰富的工具和资源帮助开发者进行开发。 3. 学习Android应用组件:Android应用由多个组件构成,如Activity、Service、Broadcast Receiver和Content Provider等,学习这些组件并掌握它们的作用是快速入门Android应用开发的另一关键。 4. 掌握布局和UI设计:Android应用的界面设计非常重要,你需要掌握常用的布局和UI设计元素,如TextView、EditText、Button、ImageView并了解它们的属性和使用场景。 5. 学习SQLite数据库操作:Android应用通常需要访问和管理数据,SQLite是Android系统默认的轻量级数据库,学习如何使用它可以快速入门Android应用开发。 6. 初步了解网络编程:现代Android应用通常需要访问网络接口获取数据或实现即时通信,初步了解网络编程是快速入门Android应用开发的另一关键。 7. 动手实践和不断重构:最后,为了快速入门Android应用开发,动手实践非常重要。通过实践来加深对知识点的理解和掌握,同时不断重构代码来提升代码的质量和效率。 通过以上方法,你可以快速入门Android应用开发并开始开发自己的应用。记住,学习需要时间和耐心,不要怕失败,最重要的是一定要坚持下去! ### 回答3: 要快速入门Android应用开发,您需要掌握以下几个方面: 1. 学习Java编程语言。Android应用程序是使用Java语言编写的,因此了解其语法和概念非常重要。 2. 安装Android Studio并学习使用它。Android Studio是开发Android应用所必需的IDE。 3. 学习Android基础知识。了解Android应用程序的主要组件,例如活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供程序(Content Provider),能够为您的应用程序的构建打下坚实的基础。 4. 学习XML布局。应用程序的用户界面是使用XML布局文件构建的,因此对XML语言和布局文件的了解也很重要。 5. 学习如何使用Android SDK编写代码。 Android提供了丰富的API以及相关的库来支持Android应用程序的开发,了解如何使用这些API和库并将其应用到您的应用程序中非常重要。 6. 了解如何测试您的应用程序。您可以使用Android Studio帮助您测试应用程序。 总之,快速入门Android应用程序开发需要大量学习和实践。了解Java编程语言、Android基础知识、XML布局和Android SDK,以及如何测试您的应用程序是非常重要的。还需多多实践和不断学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君去何方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值