Java Socket编程之基于UDP协议通信

news/2024/5/18 15:13:52 标签: java, udp, 开发语言

1.说明

Socket(套接字)是计算机网络编程中用于实现网络通信的一种编程接口或抽象概念。
它提供了一种标准的接口,使应用程序能够通过网络与其他计算机进行通信。
Socket可以看作是应用程序与网络之间的一个通信端点,类似于电话中的插座。
通过Socket,应用程序可以创建、连接、发送和接收数据,以实现网络通信。
Socket通常使用TCP/IP协议栈作为底层网络协议,
但也可以与其他协议一起使用,
如UDP(User Datagram Protocol)和ICMP(Internet Control Message Protocol)等。

Java中基于UDP协议实现网络通信的类:

  • DatagramPacket数据包类
  • DatagramSocket端到端通信的类

服务端和客户端都使用DatagramSocket进行通信,
只是使用的细节上面有些区别。

2.服务端编程

服务端使用DatagramSocket编程步骤:

  1. 创建DatagramSocket对象,绑定监听端口
  2. 通过receive()方法监听客户端请求
  3. 通过send()方法向客户端发送响应信息
  4. 关闭相关资源
java">package edu.java.net.socket.udp;

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

/**
 *UDP Socket 套接字服务端
 */
public class DatagramSocketServer {
    public static void main(String[] args) throws Exception {
        // 1.创建UDP服务器端,指定监听端口
        DatagramSocket socket = new DatagramSocket(10085);
        // 2.创建数据包,用于接收客户端发送的数据
        byte[] reqData = new byte[1024];
        DatagramPacket reqPacket = new DatagramPacket(reqData, reqData.length);
        // 3.接受客户端发送的数据
        // 此方法阻塞直到接收到数据
        System.out.println("服务端已经启动...");
        socket.receive(reqPacket);

        // 4.读取数据
        String info = new String(reqPacket.getData(), 0, reqPacket.getLength());
        System.out.println("服务端接收到消息:" + info);

        // 5.向客户端响应数据
        // 获取客户端的地址,端口号
        InetAddress address = reqPacket.getAddress();
        int port = reqPacket.getPort();
        // 要返回客户端的数据
        byte[] rspData = "欢迎您访问服务端!".getBytes();
        // 创建数据报,包含响应的数据信息
        DatagramPacket rspPacket = new DatagramPacket(rspData, rspData.length, address, port);
        socket.send(rspPacket);

        // 6.关闭资源
        socket.close();
    }
}

3.客户端编程

客户端使用Socket编程步骤:

  1. 创建DatagramSocket对象
  2. 创建DatagramPacket对象,指定服务端IP和端口及要发送的数据
  3. 通过send()方法向服务端发送请求信息
  4. 通过receive()方法监听服务端的响应消息
  5. 关闭相关资源
java">package edu.java.net.socket.udp;

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

/**
 *UDP Socket 套接字客户端
 */
public class DatagramSocketClient {
    public static void main(String[] args) throws Exception {
        // 1.设置服务端的地址,端口号
        InetAddress address = InetAddress.getByName("localhost");
        int port = 10085;
        // 2.创建发送的数据包
        byte[] sendData = "我是admin用户".getBytes();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, port);
        // 3.创建DatagramSocket对象,向服务器发送数据
        DatagramSocket socket = new DatagramSocket();
        socket.send(sendPacket);

        // 4.创建接收数据报,用于接受服务器端响应数据
        byte[] receiveData = new byte[1024];
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        socket.receive(receivePacket);
        String reply = new String(receivePacket.getData(), 0, receivePacket.getLength());
        System.out.println("客户端收到服务端消息:" + reply);

        // 5.关闭资源
        socket.close();
    }
}

4.服务端多线程编程

实际场景中,一个服务端往往可以支持多个客户端的连接,为多个客户端提供服务。

请参考Java UDP实现一个聊天工具的示例代码


http://www.niftyadmin.cn/n/5239726.html

相关文章

第三方支付原理

1.什么是第三方支付 所谓第三方支付,就是一些和各大银行签约、并具备一定实力和信誉保障的第三方独立机构提供的交易支持平台。在通过第三方支付平台的交易中,买方选购商品后,使用第三方平台提供的账户进行货款支付,由第三方通知卖…

浅谈安科瑞网络电力仪表在斯里兰卡某项目的应用

摘要:安科瑞APM系列网络仪表适用于高低压柜,进线以及出线处的全电量测量及监测。 Absrtact: APM series of network power meter are suitable for full power measurement and monitoring of high and low voltage cabinets, incoming and outgoing li…

获取Spring容器Bean工具类

获取Spring容器Bean工具类 1、创建SpringUtils工具类2、注册 SpringUtils工具类3、如果打包的是War方式,可能上面两个注册工具类的方法都没用 1、创建SpringUtils工具类 public class SpringUtils implements ApplicationContextAware {private static Application…

计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具

计算机视觉之手势、面部、姿势捕捉以 Python Mediapipe为工具 文章目录 1.Mediapipe库概述2.手势捕捉(hands)3.面部捕捉(face)4.姿势捕捉(pose) 1.Mediapipe库概述 Mediapipe是一个开源且强大的Python库,由Google开发和维护。它提供了丰富的工具和功能&#xff0c…

自助POS收银机-亿发互联网收银解决方案助力零售业迎接数字经济挑战

零售业作为中国经济的主动脉,扮演着至关重要的角色。最新发布的《中国线下零售小店数字化转型报告》揭示了当前线下零售小店所面临的多重痛点,经营方式传统、滞后的内部管理和营销模式,以及缺乏消费数据等问题,这些痛点都指明&…

Hadoop学习笔记(HDP)-Part.13 安装Ranger

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

第三节:提供者、消费者、Eureka

一、 提供者 消费者(就是个说法、定义,以防别人叭叭时听不懂) 服务提供者:业务中被其他微服务调用的服务。(提供接口给其他服务调用)服务消费者:业务中调用其他微服务的服务。(调用…

网站高可用架构设计基础

从公众号转载,关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、网站高可用概述 不要尝试着去避免故障,而是要把处理故障的代码当成正常的功能做在架构里写在代码里。 高可用是一种面向风险设计&a…