首页 > 其他分享 >基于UDP协议的Socket通信

基于UDP协议的Socket通信

时间:2023-04-19 23:34:24浏览次数:37  
标签:DatagramSocket UDP DatagramPacket Socket 通信 socket new 数据 客户端

TCP和UDP最大的区别在于是否需要客户端与服务端建立连接后才能进行数据传输,如果你学习前面的TCP,传输前先开服务端,accept,等客户端接入,然后获得客户端socket然后进行IO操作,而UDP则不用,UDP以数据报作为数据的传输载体,在进行传输时首先要把传输的数据定义成数据报(Datagram),在数据报中指明数据要到达的Socket(主机地址和端口号),然后再将数据以数据报的形式发送出去,服务端收不收到我就不知道了,除非服务端收到后又给我回一段确认的数据报。


基于UDP协议的Socket通信_服务器端

1.服务端实现步骤

Step 1:创建DatagramSocket,指定端口号

Step 2:创建DatagramPacket

Step 3:接收客户端发送的数据信息

Step 4:读取数据

示例代码:

public class UPDServer {
    public static void main(String[] args) throws IOException {
        /*
         * 接收客户端发送的数据
         */
        // 1.创建服务器端DatagramSocket,指定端口
        DatagramSocket socket = new DatagramSocket(12345);
        // 2.创建数据报,用于接收客户端发送的数据
        byte[] data = new byte[1024];// 创建字节数组,指定接收的数据包的大小
        DatagramPacket packet = new DatagramPacket(data, data.length);
        // 3.接收客户端发送的数据
        System.out.println("****服务器端已经启动,等待客户端发送数据");
        socket.receive(packet);// 此方法在接收到数据报之前会一直阻塞
        // 4.读取数据
        String info = new String(data, 0, packet.getLength());
        System.out.println("我是服务器,客户端说:" + info);

        /*
         * 向客户端响应数据
         */
        // 1.定义客户端的地址、端口号、数据
        InetAddress address = packet.getAddress();
        int port = packet.getPort();
        byte[] data2 = "欢迎您!".getBytes();
        // 2.创建数据报,包含响应的数据信息
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
        // 3.响应客户端
        socket.send(packet2);
        // 4.关闭资源
        socket.close();
    }
}

2.客户端实现步骤:

Step 1:定义发送信息

Step 2:创建DatagramPacket,包含将要发送的信息

Step 3:创建DatagramSocket

Step 4:发送数据

public class UDPClient {
    public static void main(String[] args) throws IOException {
        /*
         * 向服务器端发送数据
         */
        // 1.定义服务器的地址、端口号、数据
        InetAddress address = InetAddress.getByName("localhost");
        int port = 8800;
        byte[] data = "用户名:admin;密码:123".getBytes();
        // 2.创建数据报,包含发送的数据信息
        DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
        // 3.创建DatagramSocket对象
        DatagramSocket socket = new DatagramSocket();
        // 4.向服务器端发送数据报
        socket.send(packet);

        /*
         * 接收服务器端响应的数据
         */
        // 1.创建数据报,用于接收服务器端响应的数据
        byte[] data2 = new byte[1024];
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
        // 2.接收服务器响应的数据
        socket.receive(packet2);
        // 3.读取数据
        String reply = new String(data2, 0, packet2.getLength());
        System.out.println("我是客户端,服务器说:" + reply);
        // 4.关闭资源
        socket.close();
    }
}

3.本节小结:

本节内容比较简单,无非就是将数据转换为字节,然后放到DatagramPacket(数据报包中),发送的时候带上接受者的IP地址和端口号,而接收时,用一个字节数组来缓存!发送的时候需要创建一个DatagramSocket(端到端通信的类)对象,然后调用send方法给接受者发送数据报包。

标签:DatagramSocket,UDP,DatagramPacket,Socket,通信,socket,new,数据,客户端
From: https://blog.51cto.com/u_15641375/6207555

相关文章

  • 基于UDS的DoIp实现(六) -- 通信协议实现:Socket 通信
    ISO14229、UDS诊断服务文档,都说明UDS是基于Can通信实现,其接收的数据格式,也是Can数据格式。但是,一方面是在本地模拟Can通信比较麻烦,另一方面,也是想单独的将UDS抽出来,不依赖于通信协议,仅仅作为一个单独的功能进行实现,所以,这里才使用比较简单的Socket通信进行数据收发。一、Sock......
  • 7.Java 网络编程之 Socket
    Java网络编程之Socket一、课程目标网络模型TCP协议与UDP协议区别Http协议底层实现原理。二、什么是网络模型网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然......
  • Socket是什么/怎么理解Socket
    Socket先来看一下百度百科对于Socket的介绍:套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。我们将一个小......
  • [PLC]三菱Q系列MODBUS通信(QJ71C24N串口模块)
    三菱Q系列MODBUS通信(QJ71C24N串口模块)CPUQ01通信模块:QJ71C24N通信协议:MODBUSRTU编程软件:GXWORK2 打开GXWORK2,新建工程,然后右键点击智能功能模块 安装位置根据硬件实际情况设定,此处注意起始XY地址,后面会用到。     双击开关设置 CH2设置如下,通信协议......
  • 基于TCP协议的Socket通信
    上节中我们给大家接触了Socket的一些基本概念以及使用方法,相信大家对Socket已经有了初步的掌握。本节我们学习使用Socket来实现大文件的断点续传!在这里我们以他人的案例进行讲解,这是别人写好的一个Socket上传大文件的例子,不要求我们自己可以写出来,需要的时候会用就好!1.运行效果图1.......
  • udp报文
    1、介绍udp,userdatagramprotocol用户数据报协议,属于传输层协议。上层是dns等应用层协议,下层是ip协议。2、结构(1)源端口号,2字节(2)目标端口号,2字节(3)总长度,2字节,单位是字节(4)校验值,2字节,保证数据安全3、wireshark ......
  • WebSocket和Socket编程
    面试一般会问socket原理socket为啥要有端口:确定一个链路的是一个四元组Socket编程socket通信你做过socket编程吗,socket是怎么实现知道有连接过来的说说WebSocket与socket的区别先谈谈Websocket与Socket的区别首先Socket==不属于协议范畴,它把TCP/IP层复杂的操作抽象为几个简......
  • Apifox 更新 | WebSocket 接口调试功能上线!
    Apifox 新版本上线啦!欢迎升级使用:界面右上角【设置】-> 【关于Apifox】->【检查更新】看看本次版本更新主要涵盖的重点内容,有没有你所关注的功能特性:支持WebSocketAPI;自动化测试功能升级;Web端新增部分功能快捷键;支持自定义设置版本更新及安装提醒。01支持WebSocketAPI最新......
  • 论 java.net.SocketException: sendto failed: EPIPE (Broken pipe) 的解决办法
    这里只是针对我昨天遇到的问题(上传文件过大,导致出现Socket异常)的解决办法。众所周知,tomcat是有默认的文件传输大小限制的(跟android前端),后来跟服务器的哥们协调了一下,他那边改成多少都不管用,这是其一。其二是后来查google得知,tomcat设置服务器的超时时间,后来还是一样,设置成多少都不......
  • Socket error Event: 32 Error: 10053.
    Xshell意外关闭可能会出现这种问题,如遇如下错误可解决:Connectingto47.106.80.28:22…Connectionestablished.Toescapetolocalshell,press‘Ctrl+Alt+]’.SocketerrorEvent:32Error:10053.Connectionclosing…Socketclose.Connectionclosedbyforeignhost.Dis......