UDP/TCP 协议

Netty之UDP协议实现数据接收 UDP协议的介绍: 我就不多说了,参考 百度百科 跟我个人理解,需要注意的是: 1、UDP的有效端口范围在0-65535之间,大约49151的端口都代表动态端口 2、UDP是一种无连接的,不可靠的传输层协议 接下来就是Netty实现UDP, 使用Netty的好处? 他简化网络应用的编程过程开发,例如UDP和TCP的socket服务开发,他功能比较强大,并且提供了编码好解码的能力,并且很多著名的框架都是底层采用Netty,比如Dubbo,服务提供者和消费者之间的通信。淘宝的消息中间件 Ro. 阅读详情

UDP: User Datagram Protocol  用户数据报协议 是一种无连接的协议。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。

使用UDP: 在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多


UDP广播:广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机。值得强调的是:本地广播信息是不会被路由器转发。当然这是十分容易理解的,因为如果路由器转发了广播信息,那么势必会引起网络瘫痪。这也是为什么IP协议的设计者故意没有定义互联网范围的广播机制。其实广播顾名思义,就是想局域网内所有的人说话,但是广播还是要指明接收者的端口号的,因为不可能接受者的所有端口都来收听广播。

发送接收 demo:

    public static void sendBroadcast(byte[] data, int port) throws Exception{
        DatagramSocket socket = new DatagramSocket();
        socket.setBroadcast(true);
        DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("255.255.255.255"), port);
        socket.send(packet);
    }

    public static void receiveBoradcast(int port) {
        new Thread(new Runnable() {

            DatagramSocket socket;

            @Override
            public void run() {
                while (true) {
                    try {
                        receive(port);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }

            public void receive(int port) throws Exception{
                if (socket == null || socket.isClosed()) {
                    socket = new DatagramSocket(port);
                    socket.setBroadcast(true);
                }

                byte[] buffer = new byte[1024 * 100];
                DatagramPacket packet = new DatagramPacket(buffer , buffer.length);
                socket.receive(packet);
                String data = new String(packet.getData(), 0, packet.getLength());
                Log.i("receiver", data);
                socket.close();
            }

        }).start();
    }


Netty 实现 demo

public class Broadcast {

    Channel udpChannel;

    public void send(String data) throws Exception{
        if(udpChannel != null) {
            udpChannel.writeAndFlush(data);
        }
    }

    public void init(int port) {
        NioEventLoopGroup group = new NioEventLoopGroup();
        Bootstrap bootstrap = new Bootstrap();
        bootstrap.group(group)
                .channel(NioDatagramChannel.class)
                .option(ChannelOption.SO_BROADCAST, true)
                .handler(new MessageToMessageEncoder<String>() {
                    @Override
                    protected void encode(ChannelHandlerContext ctx, String msg, List<Object> out) throws Exception {
                        InetSocketAddress remoteAddress = new InetSocketAddress("255.255.255.255", port);
                        out.add(new DatagramPacket(Unpooled.copiedBuffer(msg, CharsetUtil.UTF_8), remoteAddress));
                    }
                });
        udpChannel = bootstrap.bind(0).syncUninterruptibly().channel();
    }

}

public class BroadcastReceiver {

    public void start(int port){
        Bootstrap b = new Bootstrap();
        NioEventLoopGroup group = new NioEventLoopGroup();
        try {
            b.group(group)
                    .channel(NioDatagramChannel.class)
                    .option(ChannelOption.SO_BROADCAST, true)
                    .handler(new SimpleChannelInboundHandler<DatagramPacket>() {

                        @Override
                        protected void messageReceived(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {
                            String req = packet.content().toString(CharsetUtil.UTF_8);
                            System.out.println(req);
                        }
                    });
            b.bind(port).sync().channel().closeFuture().await();
        }catch (Exception e) {
            e.printStackTrace();
        }finally {
            group.shutdownGracefully();
        }
    }

}

多播  

多播数据报套接字类用于发送和接收 IP 多播包。MulticastSocket 是一种 (UDP) DatagramSocket,它具有加入 Internet 上其他多播主机的“组”的附加功能。

多播组通过 D 类 IP 地址和标准 UDP 端口号指定。D 类 IP 地址在 224.0.0.0 和 239.255.255.255 的范围内(包括两者)。地址 224.0.0.0 被保留,不应使用。

多播 demo

public class MultiBroadcast {

    public void startReveive(String host, int port) {

        new Thread(new Runnable() {

            MulticastSocket ms;

            private void receive(String host, int port) throws Exception{
                byte[] buf = new byte[1024 * 100];
                if(ms == null || ms.isClosed()) {
                    ms = new MulticastSocket(port);
                    DatagramPacket dp = new DatagramPacket(buf, buf.length);
                    InetAddress group = InetAddress.getByName(host);
                    ms.joinGroup(group);
                    ms.receive(dp);
                }

                Log.i("receiver", new String(buf));
                ms.close();
            }

            @Override
            public void run() {
                while (true) {
                    try {
                        receive(host, port);
                        Thread.sleep(100);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

    public void send(String host, int port, String message) throws Exception{
        InetAddress group = InetAddress.getByName(host);
        MulticastSocket s = new MulticastSocket();
        s.joinGroup(group);
        DatagramPacket dp = new DatagramPacket(message.getBytes(),message.length(), group,port);
        s.send(dp);
        s.close();
    }

}

单播

public class UnicastBroadcast {

    public void send(String host, int port, byte[] message) throws Exception{
        //sending data to host and its port
        InetAddress address = InetAddress.getByName(host);
        // Initialize a datagram packet with data and address
        DatagramPacket packet = new DatagramPacket(message, message.length, address, port);
        // Create a datagram socket, send the packet through it, close it.
        DatagramSocket dsocket = new DatagramSocket();
        dsocket.send(packet);
        dsocket.close();
    }

    public void startReceive() {
        new Thread(new Runnable() {

            DatagramSocket dsocket;

            @Override
            public void run() {

            }

            private void receive(int port) throws Exception{

                byte[] buffer = new byte[2048];
                if(dsocket == null || dsocket.isClosed()) {
                    //receiving data from its port
                    dsocket = new DatagramSocket(port);
                    // Create a buffer to read datagrams into. If a
                    // packet is larger than this buffer, the
                    // excess will simply be discarded!

                    // Create a packet to receive data into the buffer
                    DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

                    // Wait to receive a datagram
                    dsocket.receive(packet);
                    // Convert the contents to a string, and display them
                    String msg = new String(buffer);
                    System.out.println(packet.getAddress().getHostName() + ": " + msg);
                }
                
                dsocket.close();

            }

        }).start();
    }

}



Netty dmo

http://colobu.com/2014/10/21/udp-and-unicast-multicast-broadcast-anycast/#单播





TCP/UDP以及端口协议功能 文章目录前言:本章主要介绍TCP/UDP协议以及端口协议功能,TCP链接的三次握手和TCP链接的四次挥手TCP(Transmission Control Protocol)TCP的报文字段UDP协议常用端口号及其说明TCP连接的三次握手4.TCP断开连接的四次挥手 前言:本章主要介绍TCP/UDP协议以及端口协议功能,TCP链接的三次握手和TCP链接的四次挥手 TCP(Transmission Control Protocol) TCP:Transmission Control Protocol 传输控制 阅读详情

相关推荐

【详解】TCP/UDP模式下的MODBUS协议转换

modbus测试 此功能主要用来实现设备通讯的兼容性。比如相距较远的两台设备,其中A设备使用Modbus RTU协议进行通讯,B设备使用Modbus TCP协议进行通讯。 如果不使用协议转换功能,那么将无法识别彼此的数据。如果A设备连接的DTU使用ModbusRTU转Modbus TCP功能,那么A设备发送Modbus RTU格式的数据时,B设备就会收到Modbus TCP格式的数据;B设备发送Modbus TCP格式的数据,A设备会接收到Modbus RTU格式的数据,从而实现了不同协议设备的兼容互联。

AshiningFAE的博客 4440

java网络编程基础—Netty框架应用基础

缘由: 在最近的一段时间中,一直没有对java网络编程有了解,只知道socket的大概却又说不清楚,但常规的socket编程已经不适合现在的开发了,于是我去了解了有什么java网络框架能减少网络编程的难度。其实有2个,Mina与Netty,热门的rpc框架dubbo的网络通信部分就是用这2者实现的(使用时选择使用其中一个)。但Netty的社区还在活跃,所以还是选择去了解了Netty框架,把《Ne...

sigou389的博客 412

DLMS/COSEM协议(二)——UDP、TCP、CoAP传输方式

DLMS/COSEM AL只侦听一个UDP或TCP端口。另一方面,一个物理设备可以承载多个客户机或服务器AP。包装器子层提供的附加寻址功能允许寻址这些ap。

一个bug是bug,多个bug能work 1871

Netty之Future和ChannelFuture

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33816946的博客 410

TCP/UDP调试助手:网络协议测试简化工具

TCP/UDP调试助手是一种强大的网络调试工具,它提供了多种功能以帮助开发者和网络工程师测试和调试基于TCP和UDP协议的应用程序。调试助手的基本功能包括:数据捕获:能够实时捕获和显示网络上流经的TCP和UDP数据包。数据发送:允许用户手动构造数据包,并通过TCP或UDP协议发送给指定的服务器或客户端。数据接收:监听特定端口上的数据包,并将接收到的数据完整地展示给用户。过滤和解析:提供过滤功能,让用户根据特定条件筛选数据包,并对数据包内容进行解析和显示。

weixin_32445049的博客 1355

某手sig3-ios算法 Chomper黑盒调用

本文主要是介绍Chomper的算法模拟执行,Chomper目前已经已经是能比较完整的模拟ios可执行文件执行的模拟器,在这块有非常大的优势。以前安卓端有强势的unidbg,现在iOS也有Chomper了,后续等待作者持续更新,完善Chomper。强势推荐一波-> Chomper地址: https://github.com/sledgeh4w/chomper。我这块也已经使用Chomper完成雅迪系列、某手的算法调用。后续也会有更多扩展。

成小新的博客 2156

ChannelFuture的用法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34249367的博客 2234

Netty的入门-UDP协议开发

User Datagram Protocal直接用IP协议进行数据发送,提供的是面向无连接,不可靠的数据投递服务。使用UDP的应用程序必须自己解决数据丢失,重复,排序,差错确认等问题。

Eric_LanOu的博客 563

YOLOv8多传感器融合技术——摄像头阵列融合技术详解

本文详细介绍了基于YOLOv8的摄像头阵列融合技术,该技术通过多摄像头协同工作实现360度无死角环境感知。文章阐述了系统原理,包括全方位视野覆盖、冗余设计和深度感知等优势,并提供了完整的Python实现代码。关键技术涵盖多摄像头检测、立体匹配、3D投影和目标融合等模块,支持时间域融合提升稳定性。该系统可显著提高自动驾驶的环境感知能力,减少检测盲区,增强系统可靠性,是L4-L5级自动驾驶的关键技术之一。文章还展示了城市驾驶场景的实际应用,验证了该技术对复杂交通环境的适应能力。

u010117029的博客 213

MaxScript批量修改材质、贴图名称

MaxScript批量修改材质、贴图名称1 实现效果1.1 修改前材质、贴图名称1.2 修改后2 代码 1 实现效果 1.1 修改前材质、贴图名称 1.2 修改后 2 代码 prefixName = "prefiname" maxFile = "maxfilepath" makeDir "newBitmappath" mapsPath = newbitmappath + "\\" fn formatStr index = ( str = index as string newS

郑德帅 3240

【Linux 网络 (五)】Tcp/Udp协议

本篇文章主要介绍TCP/Udp报头相关字段,以及tcp可靠性保证机制:确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制;以及tcp连接管理(3次握手,4次挥手,及相关状态转变细节)

Zhenyu_Coder的博客 1950

【python爬虫--爬取电商商品及对其销量、好差评等数据进行分析】Python爬虫爬取电商商品及大数据分析-实战

选择目标电商网站:这里选择爬取两个不同电商网站(比如京东、淘宝)上的商品数据,包括商品名称、价格、销量和评价信息。编写爬虫:通过爬虫获取商品信息并保存数据。数据清洗与对齐:将两个电商网站抓取到的数据进行统一清洗和对齐。数据分析:进行销量分析、好评与差评分析等。

Dreams°的博客 4011

TCP/UDP通信协议

TCP以其可靠性和顺序传递的特性,适合于需要确保数据完整性和顺序的应用,如文件传输和网页浏览。而UDP则以其低延迟和简单的通信方式,在对速度要求严格的实时应用中表现优异,如在线游戏、视频会议和流媒体传输。

weixin_69902486的博客 2100

CMOS图像传感器——工作原理

CMOS图像传感器的曝光与读出

沧海一升的博客 9459

QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP)

一、环境介绍 QT版本: 5.12.6 编译环境: win10 64位 目标系统: Android 完整工程源码下载地址(包含APK文件):https://download.csdn.net/download/xiaolong1126626497/19051696 二、功能介绍 本软件是一款BLE蓝牙串口调试助手,支持常规的发送和接收调试,BLE是低功耗类型蓝牙,在智能家居、物联网领域使用较多。BLE低功耗蓝牙一般不能直接使用手机进行连接,手机蓝牙默认都是工作在传统蓝牙模式,无法直接连接BL..

7659

Modbus RTU协议和TCP/UDP协议的区别

Modbus通讯协议和TCP/UDP协议的区别: 1、Modbus协议属于应用层(OSI模型第7层)协议,TCP/UDP协议属于传输层(OSI模型第4层)协议,两者层级不是并列关系。 打个比喻,Modbus协议就像公司里的总经理,TCP/UDP协议就像公司里的轿车、商务车。某天总经理要到机场去乘飞机,他可以选择:1)自己开轿车去,2)让司机开商务车送去,3)搭的士/公交车过去。若选择1),那就是...

a932432866的专栏 1万+

基于PCL的电力线点云提取与分割实现

本文基于PCL库实现电力线点云提取与分割,包含6个核心处理阶段:文件读取与结果文件夹创建、高程滤波分割候选点云、欧式聚类去噪、电力线分段提取、球形邻域搜索补全点云、最终分割与可视化保存。通过PCA计算点云线性特征(阈值0.91)筛选电力线点,采用欧式聚类(容忍度3.0)去除噪点,并针对不同规模聚类差异化设置球形搜索半径(4.0/6.0)补全点云。最终通过欧式聚类分割并可视化带颜色点云。算法对高程滤波阈值、聚类参数等具有敏感性,需根据点云特性调整优化。

weixin_45196569的博客 192

网络:TCP/UDP协议一篇就搞懂

目录再谈传输层TCP的基本认识1.TCP的头格式2.为什么需要TCP协议3.什么是TCP连接,如何确立4.TCP的最大连接数UDP和TCP1.UDP头部格式2.UDP特点3.UDP的缓冲区4.TCP/UDP区别及应用场景   TCP和UDP协议是我们经常使用到的协议,关于网络协议这一方面理解起来较为抽象复杂,这两个协议其实都属于传输层协议,但是它们之前的区别与联系却暗含了很多的知识点,关于TCP和UDP编程可以参考之前的博客链接,这篇文章梳理了相关的知识点,图片来源于大佬分享的一篇文章,原文在这里 再谈传输

qq_44851228的博客 2112

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

UDP / TCP 协议

UDP / TCP 协议

Excuse_lighttime的博客 3827

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

UDP/TCP协议全解

同时,UDP是通过UDP首部中设置目的端口号来寻找目标主机,然后对目的端口的所有主机进行数据传输(TCP也是通过目的端口寻找目标主机,但找到一众目标主机后只能与其中之一进行连接),所以可以通过端口号一次性找到多台目标主机(如下图,主机A要向目的网络的所有端口为711的主机发送消息)此时数据相加的结果,与取反以后的检验和相加,应该正好为全1(数据为0的地方,检验和肯定为1;如果缓冲区域大小为3000字节,那么滑动窗口大小为3000字节,当被占满以后处理了2000字节,此时的滑动窗口大小为2000字节。

2302_80297338的博客 1557

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TCP/UDP协议

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指一个由 FTP、SMTP、TCP、UDP、IP等协议构成的协议簇。 1. 五层协议体系结构是什么? OSI 体系结构采用七层协议:由下至上分别是 物理层、数据链路层、网络层、运输层、会话层、表示层、应用层。 TCP/IP 协议的体系结构采用四层协议:由下至上分

Withered Wood 481

TCP/UDP协议基础知识

TCP/UDP协议基础知识 1.协议 指的是一组规则 2.分层模型结构 OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 TCP/IP 四层模型:链路层、网络层、传输层、应用层 应用层:HTTP,FTP,NFS,SSH,TELNET 传输层:TCP、UDP 网络层:IP、ICMP、IGMP 链路层:以太网帧协议、ARP 3.以太网协议 ARP协议:根据IP地址获取MAC地址 以太网帧协议:根据MAC地址,完成数据包的传输 4.IP协议 版本:IPv4、IPv6 TT

ding_zero的博客 419

QuecPython 网络协议之TCP/UDP协议最祥解析

QuectPython使用TCP/UDP协议通信指南

1412

面试中的TCP/UDP协议

TCP/UDP协议在通信中所处位置 网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。运输层提供了进程间的逻辑通信,运输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个运输层实体之间有一条端到端的逻辑通信信道。 正如以上所述,TCP/UDP协议主要是为通信的进程提供抽象的通信信道。 面试中的TCP/UDP 由于TCP协议应用广泛,因此是面试中必不可少的知识点...

likewind1993的博客 1916
上一篇: Error: Configuration with name 'default' not found in Android Studio 解决
下一篇: ping命令测试网速
javalive09
博客等级 码龄16年 43粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值