首页 > 其他分享 >UDP通信

UDP通信

时间:2024-06-04 09:03:37浏览次数:17  
标签:DatagramSocket UDP DatagramPacket 通信 packet new 数据包 public

UDP通信

特点:无连接、不可靠通信。 不事先建立连接;发送端每次把要发送的数据(限制在 64KB 内)、接收端 IP 、等信息封装成一个数据包,发出去就不管了。 Java 提供了一个 java.net . DatagramSocket 类 来 实现 UDP 通信 。

DatagramSocket: 用于创建客户端、服务端

构造器

说明

public DatagramSocket()​

创建客户端的Socket对象, 系统会随机分配一个端口号。

public DatagramSocket(int port)

创建服务端的Socket对象, 并指定端口号

方法

说明

public void send(DatagramPacket dp)

发送数据包

public void receive(DatagramPacket p)

使用数据包接收数据

//创建客户端的Socket对象, 系统会随机分配一个端口号。
DatagramSocket socket = new DatagramSocket();

DatagramPacket:创建数据包

构造器

说明

public DatagramPacket(byte[] buf, int length, InetAddress address, int port)

创建发出去的数据包对象

public DatagramPacket(byte[] buf, int length)

创建用来接收数据的数据包

方法

说明

public int getLength()

获取数据包,实际接收到的字节个数

//创建发出去的数据包对象

Scanner sc = new Scanner(System.in);
while(true){
    System.out.println("msg :");
    String msg = sc.nextLine();

    if("exit".equals(msg)){
        System.out.println("退出成功!");
        //释放资源
        socket.close();

        break;
    }    

    byte[] bytes = msg.getBytes();
    DatagramPacket packet = new DatagramPacket(bytes, bytes.length, 
        InetAddress.getLocalHost(), 6000);

    //发送数据包
    socket.send(packet);
}
//创建服务端的Socket对象, 并指定端口号
DatagramSocket socket = new DatagramSocket(6000);

//创建用来接收数据的数据包
byte[] buffer = new byte[1024 * 64];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length));

while(true){
    //使用数据包接收数据
    socket.receive(packet);

    //获取数据包,实际接收到的字节个数
    int len = packet.getLength();

    String rs = new String(buffer, 0, len);
    System.out.println(rs);

    packet.getAddress().getHostAddress();
    packet.getPort();

}

UDP的接收端可以接收很多发送端的消息的原因:接收端只负责接收数据包,无所谓是哪个发送端的数据包。

标签:DatagramSocket,UDP,DatagramPacket,通信,packet,new,数据包,public
From: https://blog.csdn.net/2301_81718046/article/details/139408645

相关文章

  • 安全通信网络
    文章目录安全通信网络:网络架构:网络设备性能设备网络带宽网络区域合理划分区域间的有效保护网络通信线路及设备的冗余通信传输网络传输数据具有完整性校验机制采用加密等安全措施保障数据完整性和保密性可信验证可信根验证安全通信网络:网络边界内部的局域网网络......
  • STM32 - 串口通信(HAL库)
    为什么要用HAL库?使用方便,可以完全使用GUI配置、支持更多的芯片型号和开发板、良好的封装与抽象、Easy上手和开发有什么缺点?封装层次较高,造成稍微的性能损失STM32cubemx部分以使用stm32系列的NUCLEO-F03RB为例1.配置时钟选择STM32F103RCTx系列芯片,配置时钟的同时会......
  • golang使用阿里MQTT的通信记录
    背景:我们有业务场景就是手机App可以操作物连网设备,一年之中总会有一两次,手机无法操作设备,于是我们就需要将服务器重新启动就正常了,使用的是阿里MQTT服务。猜测:我一直怀疑,这个通信系统中的可能有BUG,消息丢失无法送达或者在传递过中发生了错乱无法正确收到消息。分析:仔细研究发现......
  • 基于WebSocket的modbus通信(三)- websocket和串口
    WebSocket传递ModbusTCP数据包错误纠正上一篇还有个错误,就是客户端写数据时服务端不需要响应,但我的服务端响应了的。我选择改客户端,把写数据时接收到的响应丢弃。PrintBytes(ADUMessage.Serialze(request),"请求");if(Client!=null){awaitClient.Client.SendAsyn......
  • Kubernetes 多集群通信的五种方案
    Kubernetes多集群通信的五种方案原创 oilbeater 我的观点 2024-05-3108:03 北京 听全文oilbeater读完需要8分钟速读仅需3分钟随着企业的业务规模不断扩大,Kubernetes的使用也从单集群逐步扩展到多集群部署。多集群环境下,集群之间的通信成为一个重要的研究课......
  • Linux进程的通信
    IPC(Inter-processcommunication(IPC))进程间通信(IPC,Interprocesscommunication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。在这方面,有几种常见的通信方式,让我们一一介绍:管道(Pipe):管道是一种半双工的通信方式,数据只能......
  • 系统编程——管道通信
    管道通信Linux系统提供了一种通信方式,名字叫做管道通信,顾名思义,管道是单向的,比如水管、燃气管道等,换个说法就是管道是采用半双工通信的,也就是同一时刻只能完成发送数据或者接收数据。匿名管道匿名管道的特点是没有名称,所以用户无法使用open来创建和打开,但是匿名管道进行数据读......
  • 「网络编程」基于 UDP 协议实现回显服务器
    ......
  • 进程间通信(27000字超详解)
    ......
  • 使用select实现一个基于UDP的一对一即时聊天程序。
    注意事项UDP通信时,client要先给server发送消息,这样server才能知道client的信息代码//server#include<func.h>#defineBUFFSIZE1024intmain(){intsfd=socket(AF_INET,SOCK_DGRAM,0);if(sfd==-1){perror("socket");}structsockad......