首页 > 其他分享 >udp协议

udp协议

时间:2024-08-20 20:28:52浏览次数:8  
标签:协议 udp DatagramPacket System length new 数据包 out

发送端

package com.shujia.day20.udpdemo2;

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

/*
    1:建立udp的socket服务
    2:将要发送的数据封装成数据包
    3:通过udp的socket服务,将数据包发送出
    4:关闭资源

 */
public class SendDemo1 {
    public static void main(String[] args) throws Exception {
        //1. 创建发送端的Socket对象
        //DatagramSocket() 创建一个数据报套接字,绑定到指定的本地地址。
        DatagramSocket s = new DatagramSocket();
        Scanner sc = new Scanner(System.in);

        while (true){
            System.out.print("输入要发送的信息:");
            String info = sc.next();

            //2. 将要发送的数据封装成数据包
            //DatagramPacket
            //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
            //构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。
            byte[] buf = info.getBytes(); // 要发送的数据内容字节数组形式
            int length = buf.length; //字节数组的长度
            InetAddress address =  InetAddress.getByName("192.168.28.254"); // 目标机器的ip地址的InetAddress对象
            int port = 10086; //目标机器程序绑定的端口号
            DatagramPacket packet = new DatagramPacket(buf, length, address, port);

            //3. 通过udp的socket服务,将数据包发送出
            //public void send(DatagramPacket p)
            s.send(packet);

            if("over".equals(info)){
                System.out.println("结束会话...正在关闭发送端");
                break;
            }
        }



        //4:关闭资源
        s.close();
    }
}

接收端

package com.shujia.day20.udpdemo2;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
    udp协议接收者编程:
        1:建立udp的socket服务.
        2:通过receive方法接收数据
        3:将收到的数据存储到数据包对象中
        4:通过数据包对象的功能来完成对接收到数据进行解析.
        5:可以对资源进行关闭

 */
public class ReceiveDemo1 {
    public static void main(String[] args) throws Exception {
        //1. 创建接收端的Socket对象,并绑定端口号
        //DatagramSocket(int port)
        //构造数据报套接字并将其绑定到本地主机上的指定端口。
        DatagramSocket s = new DatagramSocket(10086);

        //创建一个用于存储接收到的数据的数据包
        //DatagramPacket(byte[] buf, int length)
        //构造一个 DatagramPacket用于接收长度的数据包 length 。
        byte[] bao = new byte[2048];
        int length = bao.length;
        DatagramPacket packet = new DatagramPacket(bao, length);

        while (true){
            //2:通过receive方法接收数据
            s.receive(packet);


            //通过数据包对象的功能来完成对接收到数据进行解析.
            //获取数据包中的数据
            byte[] data = packet.getData();
            //int getLength() 返回要发送的数据的长度或接收到的数据的长度。
            int len = packet.getLength();
            String info = new String(data, 0, len);


            //InetAddress getAddress() 获取发送者的信息
            //返回该数据报发送或接收数据报的计算机的IP地址。
            InetAddress address = packet.getAddress();
            String hostName = address.getHostName();
            String ip = address.getHostAddress();
            if("over".equals(info)){
                System.out.println("***********************************");
                System.out.println(hostName + "发送已结束会话....");
                System.out.println("***********************************");
                break;
            }

            System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            System.out.println("有一条数据来自ip地址为:"+ip);
            System.out.println("主机名:" + hostName + ",发来一条消息:" + info);
            System.out.println("------------------------------------------------------------------");
        }

        //关闭资源
        s.close();


    }
}

标签:协议,udp,DatagramPacket,System,length,new,数据包,out
From: https://www.cnblogs.com/qiwei-bigdata/p/18370257

相关文章

  • SPI协议详解
    SPI协议详解摘要SPI(SerialPeripheralInterface)是一种同步串行通信协议,用于微控制器(MCU)和它们的外围设备(外设IC)之间或两个微控制器(MCU)之间的通信。SPI通信是全双工的,意味着它可以同时发送和接收数据。,以其全双工、高速率和简单硬件结构优于UART。SPI通信通常需要四根线:SCLK(时......
  • IOS 12 自定义用户协议对话框
    实现效果实现逻辑本文使用QMUI里面提供的控制器+自定义控件实现。添加依赖#腾讯开源的UI框架,提供了很多功能,例如:圆角按钮,空心按钮,TextView支持placeholder#https://github.com/QMUI/QMUIDemo_iOS#https://qmuiteam.com/ios/get-startedpod"QMUIKit"还不了解如何使......
  • Modbus协议
    一、Modbus协议Modbus协议是一种软件协议,支持RS232(硬件层协议)、RS485(硬件层协议)、TCP/IP等多种电气接口。Modbus协议标准开放、无版权要求,消息帧格式简单,便于厂商开发和集成。Modbus可以在各种介质上传输,报文类型支持ASCII、RTU、TCP三种,使用串口传输时选择ASCII(字符)和RTU模......
  • 学懂C++(三十九):网络编程——深入详解 TCP 和 UDP 的区别和应用场景
    目录一、TCP的特点及应用场景1.可靠性2.流控制和拥塞控制3.有序传输4.应用场景二、UDP的特点及应用场景1.无连接2.不可靠性3.轻量级4.支持广播和多播5.应用场景三、TCP和UDP的区别四、TCP和UDP的工作原理1.TCP的工作原理三次握手数据传输......
  • 网络通讯协议与套接字
    网络通讯协议与套接字一、基本概念网络网络就是一种辅助双方或者多方能够连接在一起的工具,为了让在不同的电脑上运行的软件,之间能够互相传递数据,就需要借助网络的功能IP地址IP地址的概念和作用地址就是用来标记地点的,用来在网络中标记一台电脑,比如192.168.1.1......
  • ZooKeeper系列之ZAB协议
    概述ZooKeeperAtomicBroadcast,ZooKeeper原子消息广播协议。ZAB协议是为分布式协调服务ZK专门设计的一种支持崩溃恢复的原子广播协议。ZK主要依赖ZAB协议来实现分布式数据的最终一致性,基于该协议,ZK实现一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。集群角色......
  • gRPC协议详解及其在Go语言中的使用指南
    说明gRPC是基于HTTP/2协议传输,使用ProtocolBuffers作为接口描述语言,并提供认证(authentication)、双向流(bidirectionalstreaming)和流量控制、阻塞或非阻塞绑定以及取消和超时(Deadlines)等功能的跨平台开源的高性能RPC框架。使用场景低延迟、高度可扩展的分布式系统。开发......
  • 万兆以太网协议栈的FPGA实现(三):万兆网CRC
    参考:基于FPGA的千兆以太网的实现(3)_以太网crc计算-CSDN博客 CRC802.11来自将8位数据同时输入,再输出32位CRC数值;其能成功实现的原因就是因为并行化。(下路仅是部分的计算步骤)结合千兆网CRC的计算思想,我们只需要把第一轮单字节CRC的结果作为第二轮CRC的开始,就可以完成任务。......
  • 用UDP协议实现跨主机文件传输,实现下载与上传文件(FTFP)
    要求:实现下载服务器目录上任意文件与上传本地文件到服务器特定目录下tftp协议概述简单文件传输协议,适用于在网络上进行文件传输的一套标准协议,使用UDP传输特点:是应用层协议基于UDP协议实现数据传输模式:octet:二进制模式(常用)服务器端:tftp下载模型TFTP通信过程总结......
  • 实现网络聊天室(UDP)
    项目需求:如果有用户登录,其他用户可以收到这个人的登录信息如果有人发送信息,其他用户可以收到这个人的群聊信息如果有人下线,其他用户可以收到这个人的下线信息服务器可以发送系统信息服务器端:#include<myhead.h>structsockaddr_inserveraddr,caddr;enumtype_t//枚举{......