返回顶部
首页 > 资讯 > 操作系统 >Java网络编程 - UDP通信
  • 386
分享到

Java网络编程 - UDP通信

java网络udp 2023-08-30 12:08:40 386人浏览 安东尼
摘要

文章目录 UDP通信快速入门一发一收多发多收广播组播 UDP通信 快速入门 UDP协议的特点: UDP是一种无连接、不可靠传输的协议。 将数据源IP、目的地IP和端口以及数据封装成数据包,大小限制在64KB内,直

UDP通信

快速入门

UDP协议的特点:

UDP是一种无连接、不可靠传输的协议。

将数据源IP、目的地IP和端口以及数据封装成数据包,大小限制在64KB内,直接发送出去即可。

UDP协议通信首先要有DatagramPacket数据包对象:

DatagramPacket创建数据包对象构造器如下:

构造器说明
DatagramPacket(byte[] buf, int length, InetAddress address, int port)创建发送端数据包对象
buf:要发送的内容,字节数组
length:要发送内容的字节长度
address:接收端的IP地址对象
port:接收端的端口号
DatagramPacket(byte[] buf, int length)创建接收端的数据包对象
buf:用来存储接收的内容
length:能够接收内容的长度

DatagramPacket数据包对象常用方法如下:

方法说明
getLength()服务端可以获得实际接收到的字节个数
getAddress()获取发送端的ip地址
getPort()获取发送端的端口

其次要有发送端和接收端对象:

DatagramSocket创建发送端和接收端对象构造器如下:

构造器说明
DatagramSocket()创建发送端的Socket对象,系统会随机分配一个端口号。
DatagramSocket(int port)创建接收端的Socket对象并指定端口号

DatagramSocket发送数据包和接收数据包方法如下:

方法说明
send(DatagramPacket dp)发送数据包
receive(DatagramPacket p)接收数据包

一发一收

下面我们在代码中使用UDP通信, 实现客户端发送一条消息、服务端接收一条消息

客户端实现步骤:

  • 创建DatagramSocket对象(发送端对象)
  • 创建DatagramPacket对象封装需要发送的数据(数据包对象)
  • 使用DatagramSocket对象的send方法传入DatagramPacket对象
  • 释放资源
public class ClientDemo {    public static void main(String[] args) throws Exception {        // 1. 创建发送端对象, 发送端自带默认端口号, 也可以指定端口号        DatagramSocket socket = new DatagramSocket();        // 2. 创建一个数据包对象, 封装要发送的数据        byte[] buffer = "我是要发送的数据".getBytes();                DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getLocalHost(), 8888);        // 3. 使用发送端send方法, 用数据包发送对象        socket.send(packet);        // 4. 释放资源        socket.close();    }}

接收端实现步骤:

  • 创建DatagramSocket对象并指定端口(接收端对象)
  • 创建DatagramPacket对象接收数据(数据包对象)
  • 使用DatagramSocket对象的receive方法传入DatagramPacket对象
  • 释放资源
package com.chenyq.d2_udp1;import java.net.DatagramPacket;import java.net.DatagramSocket;public class ServerDemo {    public static void main(String[] args) throws Exception {        // 1. 创建接收端对象        DatagramSocket socket = new DatagramSocket(8888);        // 2. 创建一个数据包对象接受数据        byte[] buffer = new byte[1024 * 64];        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);        // 3. 使用接收端的receive方法, 用数据包接受数据        socket.receive(packet);        // 4. 根据实际接受数据的字节个数获取结果        int len = packet.getLength();        String res = new String(buffer, 0 , len); // 将字节数据转为字符串        System.out.println(res);        // 5. 释放资源        socket.close();    }}

测试: 先启动接收端, 再启动发送端; 可以在接收端获取到结果

多发多收

需求

  • 使用UDP通信方式开发接收端和发送端。

分析

  • 发送端可以一直发送消息。
  • 接收端可以不断的接收多个发送端的消息展示。
  • 发送端输入了exit则结束发送端程序。

客户端实现步骤:

  • 创建DatagramSocket对象(发送端对象)
  • 使用while死循环不断的接收用户的数据输入,如果用户输入的exit则退出程序
  • 如果用户输入的不是exit, 把数据封装成DatagramPacket
  • 使用DatagramSocket对象的send方法将数据包对象进行发送
  • 释放资源
public class ClientDemo {    public static void main(String[] args) throws Exception {        // 1. 创建发送端对象, 使用默认端口发送        DatagramSocket socket = new DatagramSocket();        // 2. 使用while死循环不断地接收用户输入数据, 如果输入exit则退出程序        Scanner sc = new Scanner(System.in);        while (true) {            System.out.println("发送消息: ");            String inp = sc.nextLine();            // 3. 用户输入exit则下线            if ("exit".equals(inp)) {                System.out.println("下线成功");                socket.close(); // 释放资源                break;            }            // 使用DatagramSocket对象的send方法将数据包对象进行发送            byte[] buffer = inp.getBytes();            // 创建数据包对象            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getLocalHost(), 8888);            socket.send(packet);        }    }}

接接收端实现步骤:

  • 创建DatagramSocket对象并指定端口(接收端对象)
  • 创建DatagramPacket对象接收数据(数据包对象)
  • 使用while死循环, 不断的使用DatagramSocket对象的receive方法接收数据
public class ServerDemo {    public static void main(String[] args) throws Exception {        // 1. 创建接收端对象        DatagramSocket socket = new DatagramSocket(8888);        // 2. 创建数据包对象        byte[] buffer = new byte[1024 * 64];        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);      // 3. 不断地接受数据        while (true) {            socket.receive(packet);            int len = packet.getLength();            String res = new String(buffer, 0, len);            System.out.println("收到了来自" + packet.getAddress() + "的消息: " + res);        }    }}

广播组播

UDP的三种通信方式:

单播:单台主机与单台主机之间的通信。

广播:当前主机与所在网络中的所有主机通信。

组播:当前主机与选定的一组主机的通信。

在这里插入图片描述

UDP如何实现广播:

使用广播地址:255.255.255.255

具体操作:

  • 发送端发送的数据包的目的地写的是广播地址、且指定端口。 (例如: 255.255.255.255 , 端口: 9999)
  • 本机所在同一个网段的其他主机的程序, 只要注册对应端口就可以收到消息了。(9999)
public class ClientDemo {    public static void main(String[] args) throws Exception {        DatagramSocket socket = new DatagramSocket();        Scanner sc = new Scanner(System.in);        while (true) {            System.out.println("发送消息: ");            String inp = sc.nextLine();            if ("exit".equals(inp)) {                System.out.println("下线成功");                break;            }            byte[] buffer = inp.getBytes();            // 发送的地址应该是广播地址            DatagramPacket packet = new DatagramPacket(buffer, buffer.length,                    InetAddress.getByName("255.255.255.255"), 9999);            socket.send(packet);        }    }}
public class ServerDemo {    public static void main(String[] args) throws Exception {        // 注册相同的端口号即可收取广播发送的消息        DatagramSocket socket = new DatagramSocket(9999);        byte[] buffer = new byte[1024 * 64];        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);        while (true) {            socket.receive(packet);            int len = packet.getLength();            String res = new String(buffer, 0, len);            System.out.println("收到了来自" + packet.getAddress() + "的消息: " + res);        }    }}

UDP如何实现组播:

使用组播地址:224.0.0.0 ~ 239.255.255.255

具体操作:

  • 发送端的数据包的目的地是组播IP (例如:224.0.1.1, 端口:9999)
  • 接收端必须绑定该组播IP(224.0.1.1),端口还要注册发送端的目的端口9999 ,这样即可接收该组播消息。
  • DatagramSocket的子类MulticastSocket可以在接收端绑定组播IP。
public class ClientDemo {    public static void main(String[] args) throws Exception {        DatagramSocket socket = new DatagramSocket();        Scanner sc = new Scanner(System.in);        while (true) {            System.out.println("发送消息: ");            String inp = sc.nextLine();            if ("exit".equals(inp)) {                System.out.println("下线成功");                break;            }            byte[] buffer = inp.getBytes();            // 发送的地址使用组播地址            DatagramPacket packet = new DatagramPacket(buffer, buffer.length,                    InetAddress.getByName("224.0.1.1"), 8888);            socket.send(packet);        }    }}
public class ServerDemo {    public static void main(String[] args) throws Exception {        // 使用DatagramSocket的子类MulticastSocket可以在接收端绑定组播IP        MulticastSocket socket = new MulticastSocket(8888);        // 把当前接收端加入到一个组播组中去: 绑定对应的组播消息的组播IP        socket.joinGroup(InetAddress.getByName("224.0.1.1"));        byte[] buffer = new byte[1024 * 64];        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);        while (true) {            socket.receive(packet);            int len = packet.getLength();            String res = new String(buffer, 0, len);            System.out.println("收到了来自" + packet.getAddress() + "的消息: " + res);        }    }}

来源地址:https://blog.csdn.net/m0_71485750/article/details/127716314

--结束END--

本文标题: Java网络编程 - UDP通信

本文链接: https://lsjlt.com/news/382869.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java网络编程 - UDP通信
    文章目录 UDP通信快速入门一发一收多发多收广播组播 UDP通信 快速入门 UDP协议的特点: UDP是一种无连接、不可靠传输的协议。 将数据源IP、目的地IP和端口以及数据封装成数据包,大小限制在64KB内,直...
    99+
    2023-08-30
    java 网络 udp
  • Java网络编程之UDP网络通信详解
    目录1.UDP网络通信编程原理1.1 UDP网络通信编程介绍1.2 UDP网络通信编程的基本流程2.UDP网络通信编程案例1.UDP网络通信编程原理 1.1 UDP网络通信编程介绍 ...
    99+
    2024-04-02
  • Java实现基于UDP协议的网络通信UDP编程
    目录UDP编程通信基本介绍基本流程UDP编程通信 基本介绍 类DatagramSocket和DatagramPacket【数据包/数据报】实现了基于UDP协议网络程序。UDP数据报通...
    99+
    2023-05-17
    Java UDP编程 Java UDP网络编程
  • Android网络编程之UDP通信模型实例
    什么是Android UDP? UDP是User Datagram Protocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单...
    99+
    2022-06-06
    模型 udp Android
  • Java网络编程 - TCP通信
    文章目录 TCP通信快速入门(一发一收)编写客户端代码编写服务器代码 多发多收多发多收(同时接受多个客户端)线程池优化 TCP通信 快速入门(一发一收) TCP协议回顾: TCP是一种面向连接,安全、可靠的...
    99+
    2023-08-16
    网络 tcp/ip java
  • 网络编程—udp
    一、ip地址 1. 什么是地址 地址就是用来标记地点的   2. ip地址的作用 ip地址:用来在网络中标记一台电脑,比如192.168.1.1;在本地局域网上是唯一的。   3. ip地址的分类 每一个IP地址包括两部分:网络地址和主机...
    99+
    2023-01-31
    网络编程 udp
  • Java网络编程 - 网络编程介绍 - 网络通信三要素
    文章目录 网络编程网络编程介绍网络通信三要素要素一: IP地址IP地址基本介绍IP地址的操作类 要素二: 端口号要素三: 协议TCP协议UDP协议 网络编程 网络...
    99+
    2023-09-07
    网络 java 网络协议
  • .NET网络编程——TCP通信
    一、网络编程的基本概念 : 1. 网络         就是将不同区域的电脑连接到一起,组成局域网、城域网或广域网。把分部在不同地理区域的计算机于专门的外部设备用通信线路 互联成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相...
    99+
    2023-08-31
    网络 tcp/ip 服务器 .net eclipse java
  • 【网络】socket——预备知识 | 套接字 | UDP网络通信
    🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! 在前面本喵对网络的整体轮廓做了一个大概的介绍,比如分层,协议...
    99+
    2023-09-02
    网络 udp
  • Java网络编程之UDP和TCP套接字
    文章目录 一. 网络编程概述二. UDP网络编程1. UDP套接字2. UDP客户端回显服务器程序2.1 UDP回显服务器2.2 UDP客户端2.3 UDP实现查词典的服务器 三. ...
    99+
    2023-09-08
    网络编程 Java Socket UDP/TCP 套接字
  • Java网络编程之UDP实现原理解析
    UDP实现通信非常简单,没有服务器,每个都是客户端,每个客户端都需要一个发送端口和一个接收端口。一个客户端向另一个客户端发送消息时,需要知道对方的IP和接收端口,所用到的类为Data...
    99+
    2024-04-02
  • Java网络编程UDP实现多线程在线聊天
    本文实例为大家分享了Java实现多线程在线聊天的具体代码,供大家参考,具体内容如下 上一篇博客通过UDP实现了聊天,但只能单方面发送消息,这次实现了多线程在线聊天,也就是可以双方互发...
    99+
    2024-04-02
  • Java网络编程UDP协议发送接收数据
    本文实例为大家分享了Java网络编程UDP协议发送接收数据的具体代码,供大家参考,具体内容如下 UDP协议发送数据步骤 A:创建发送端socket对象; B:创建数据,并把数据打包;...
    99+
    2024-04-02
  • Java网络编程之TCP通信完整代码示例
    一、概述  Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信。Socket类的方法会建立和销毁连接,设置各种Socket选项。  ServerSocket类是Java执行服务器端...
    99+
    2023-05-30
    java tcp socket
  • Java网络编程UDP实现消息发送及聊天
    TCP可以实现聊天,UDP也可以实现消息发送及聊天。不同的是,TCP需要有服务端和客户端的连接,但UDP不需要,只需要有发送方和接收方即可。 一、实现消息发送 发送方: pack...
    99+
    2024-04-02
  • C++ Socket实现TCP与UDP网络编程
    目录前言TCP1). 服务器2). 客户端3). TCP聊天小项目UDP1). 服务器2). 客户端总结前言 socket编程分为TCP和UDP两个模块,其中TCP是可靠的、安全的,...
    99+
    2024-04-02
  • 详细介绍java UDP通信
    介绍:UDP为用户数据报协议,在java中操纵UDP使用JDK中java.net包下的DatagramSocket和DatagramPacket类,可以方便的控制用户数据报文。DatagramPacket类将数据字节填充到UDP包中,这称为...
    99+
    2016-02-03
    java教程 java UDP通信
  • Java 网络编程
    Java 网络编程   目录 Java 网络编程   Socket 编程 ServerSocket 类的方法 Socket 类的方法   InetAddress 类的方法 Socket 客户端实例 Socket 服务端实例     网络编...
    99+
    2023-10-09
    java
  • Python LeetCode HTTP 教程:如何通过编程实现网络通信?
    Python作为一门强大的编程语言,不仅可以完成各种数据处理任务,还可以通过编写网络通信程序来实现网络通信。在本文中,我们将介绍如何使用Python编写HTTP请求程序,并通过LeetCode上的题目来加深理解。 HTTP是一种在Web上...
    99+
    2023-09-19
    leetcode http 教程
  • PHP学习笔记:网络编程与Socket通信
    在当今互联网时代,网络编程是一项非常重要的技能。它允许我们在不同的计算机之间进行通信和数据交换。而PHP作为一种强大的服务器端脚本语言,提供了丰富的网络编程功能,其中包括Socket通信。Socket通信是一种基于TCP/IP协议的网络编程...
    99+
    2023-10-21
    PHP网络编程 学习笔记 Socket通信
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作