精华内容
下载资源
问答
  • 报文的发送和接收

    2009-03-24 15:52:41
    发送端  */ public void send() throws Exception {  System.out.println("send..............");  // 得到目标机器地址实例  InetAddress target = InetAddress.getByName("localhost&...

    /*

     * 发送端

     */

    public void send() throws Exception {
            System.out.println("send..............");

            // 得到目标机器的地址实例

            InetAddress target = InetAddress.getByName("localhost");

            // 从8888端口发送数据报
            DatagramSocket ds = new DatagramSocket(8888);
            String hello = "Hello, I am come in!";
            // 将数据转换成Byte类型
            byte [] buf = hello.getBytes();
            // 将BUF缓冲区中的数据打包,目标端口为8889
            DatagramPacket op = new DatagramPacket(buf, buf.length, target, 8889);

            // 发送
            ds.send(op);
            ds.close();
            System.out.println("send end." + target.getHostAddress());
    }

     

    /*

     * 接收端

     */

    public void receive() throws Exception {
            System.out.println("receive........");
            byte [] buf = new byte [1000];

            // 监视8889端口
            DatagramSocket ds = new DatagramSocket(8889);       
            // 创建接收数据报的实例
            DatagramPacket ip = new DatagramPacket(buf, buf.length);      
            while (true ) {
                // 将收到的数据报装入IP中
                ds.receive(ip);           
                System.out.println(new String(buf));
            }
    }

    展开全文
  • 1、是否接收对端rip协议更新报文的判断标准为:能否学习到对端发送的更新报文中携带的路由信息,即RIP路由表中有路由信息 2、关于RIP的版本,端口视图配置的RIP 版本优先级要高于RIP进程视图下配置的RIP版本优先级 ...
  • java报文的发送和接收

    2013-08-10 23:06:00
    * 发送端 */ public void send() throws Exception { System.out.println("send.............."); // 得到目标机器地址实例 InetAddress target = InetAddress.getByName("local...
    /*
    
     * 发送端
    
     */
    
    public void send() throws Exception {
            System.out.println("send..............");
    
            // 得到目标机器的地址实例
    
            InetAddress target = InetAddress.getByName("localhost");
    
            // 从8888端口发送数据报
            DatagramSocket ds = new DatagramSocket(8888);
            String hello = "Hello, I am come in!";
            // 将数据转换成Byte类型
            byte [] buf = hello.getBytes();
            // 将BUF缓冲区中的数据打包,目标端口为8889
            DatagramPacket op = new DatagramPacket(buf, buf.length, target, 8889);               
    
            // 发送
            ds.send(op);
            ds.close();
            System.out.println("send end." + target.getHostAddress());
    }
    
     
    
    /*
    
     * 接收端
    
     */
    
    public void receive() throws Exception {
            System.out.println("receive........");
            byte [] buf = new byte [1000];
    
            // 监视8889端口
            DatagramSocket ds = new DatagramSocket(8889);       
            // 创建接收数据报的实例
            DatagramPacket ip = new DatagramPacket(buf, buf.length);      
            while (true ) {
                // 将收到的数据报装入IP中
                ds.receive(ip);           
                System.out.println(new String(buf));
            }
    }

     

    转载于:https://www.cnblogs.com/makar/p/3250841.html

    展开全文
  • 本文分析一下dubbo协议如何使用netty完成了报文的发送和接收,分为服务端和消费端解析源代码。 下面的代码来自类NettyServer的doOpen方法,该方法完成netty服务端的启动,执行完该方法,netty就可以接收请求了。消费...

    本文基于dubbo 2.7.5版本代码

    本文分析一下dubbo协议如何使用netty完成了报文的发送和接收,分为服务端和消费端解析源代码。

    一、服务端

    下面的代码来自类NettyServer(基于netty4)的doOpen方法,该方法完成netty服务端的启动,执行完该方法,netty就可以接收请求了。

    	protected void doOpen() throws Throwable {
    		//ServerBootstrap是服务端启动辅助类,通过他可以方便的创建一个Netty服务端
            bootstrap = new ServerBootstrap();
            //创建处理客户端连接的线程池,线程只有一个,而且都是后台线程
            bossGroup = new NioEventLoopGroup(1, new DefaultThreadFactory("NettyServerBoss", true));
            创建处理客户端IO操作的线程池,线程数默认是处理器个数+1,可以通过参数iothreads配置
            workerGroup = new NioEventLoopGroup(getUrl().getPositiveParameter(IO_THREADS_KEY, Constants.DEFAULT_IO_THREADS),
                    new DefaultThreadFactory("NettyServerWorker", true));
    		//创建服务端处理器
            final NettyServerHandler nettyServerHandler = new NettyServerHandler(getUrl(), this);
            //channels代表了所有客户端的连接
            channels = nettyServerHandler.getChannels();
    		//配置ServerBootstrap
            bootstrap.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    //低延迟发送数据
                    .childOption(ChannelOption.TCP_NODELAY, Boolean.TRUE)
                    //SO_REUSEADDR=true表示允许重复使用本地地址和端口
                    .childOption(ChannelOption.SO_REUSEADDR, Boolean.TRUE)
                    //ALLOCATOR设置内存分配器,Channel收到的数据保存在该分配器分配的内存中
                    //默认使用的是池化直接内存
                    .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
                    .childHandler(new ChannelInitializer<NioSocketChannel>() {
                        @Override
                        //初始化连接channel
                        //当客户端连接进来后,便使用下面的方法对其Channel初始化
                        protected void initChannel(NioSocketChannel ch) throws Exception {
                        	//获得心跳超时时间,可以通过heartbeat.timeout配置
                        	//默认超时时间是3分钟
                            int idleTimeout = UrlUtils.getIdleTimeout(getUrl());
                            NettyCodecAdapter adapter = new NettyCodecAdapter(getCodec(), getUrl(), NettyServer.this);
                            //是否开启SSL
                            if (getUrl().getParameter(SSL_ENABLED_KEY, false)) {
                                ch.pipeline().addLast("negotiation",
                                        SslHandlerInitializer.sslServerHandler(getUrl(), nettyServerHandler));
                            }
                            ch.pipeline()
                                    .addLast("decoder", adapter.getDecoder())//设置解码器
                                    .addLast("encoder", adapter.getEncoder())//设置编码器
                                    .addLast("server-idle-handler", new IdleStateHandler(0, 0, idleTimeout, MILLISECONDS))//设置心跳检测处理器
                                    .addLast("handler", nettyServerHandler);//设置自定义处理器,该处理器最后通过异步线程调用到真正提供服务的对象上
                        }
                    });
            // 绑定端口
            ChannelFuture channelFuture = bootstrap.bind(getBindAddress());
            //执行下面的代码后,表示服务端可以接收外部请求了
            channelFuture.syncUninterruptibly();
            //获得代表服务端的channel对象
            channel = channelFuture.channel();
    
        }
    

    二、消费端

    消费端代码来自类NettyClient(基于netty4),消费端netty启动分为两步,第一个步是启动netty(doOpen方法),第二步是建立与服务端的连接(doConnect方法)。
    消费端启动:

    	protected void doOpen() throws Throwable {
            final NettyClientHandler nettyClientHandler = new NettyClientHandler(getUrl(), this);
            //Bootstrap是消费端启动辅助类,通过他可以方便的创建一个Netty消费端
            bootstrap = new Bootstrap();
            //nioEventLoopGroup表示连接池中的线程数,是处理器个数+1
            bootstrap.group(nioEventLoopGroup)
            		//下面三个参数设置含义参见服务端启动代码
                    .option(ChannelOption.SO_KEEPALIVE, true)
                    .option(ChannelOption.TCP_NODELAY, true)
                    .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
                    .channel(NioSocketChannel.class);
            //设置调用超时毫秒数,默认值3秒,可以通过参数connect.timeout设置
            bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, Math.max(3000, getConnectTimeout()));
            bootstrap.handler(new ChannelInitializer() {
    
                @Override
                protected void initChannel(Channel ch) throws Exception {
                	//心跳间隔,默认是1分钟
                    int heartbeatInterval = UrlUtils.getHeartbeat(getUrl());
                    //检查是否开启SSL
                    if (getUrl().getParameter(SSL_ENABLED_KEY, false)) {
                        ch.pipeline().addLast("negotiation", SslHandlerInitializer.sslClientHandler(getUrl(), nettyClientHandler));
                    }
    
                    NettyCodecAdapter adapter = new NettyCodecAdapter(getCodec(), getUrl(), NettyClient.this);
                    ch.pipeline()
                            .addLast("decoder", adapter.getDecoder())//设置解码器
                            .addLast("encoder", adapter.getEncoder())//设置编码器
                            .addLast("client-idle-handler", new IdleStateHandler(heartbeatInterval, 0, 0, MILLISECONDS))设置心跳检测,默认每1分钟检测一次
                            .addLast("handler", nettyClientHandler);//设置自定义处理器
    
                    String socksProxyHost = ConfigUtils.getProperty(SOCKS_PROXY_HOST);
                    if(socksProxyHost != null) {
                    	//使用socks5代理协议
                        int socksProxyPort = Integer.parseInt(ConfigUtils.getProperty(SOCKS_PROXY_PORT, DEFAULT_SOCKS_PROXY_PORT));
                        Socks5ProxyHandler socks5ProxyHandler = new Socks5ProxyHandler(new InetSocketAddress(socksProxyHost, socksProxyPort));
                        ch.pipeline().addFirst(socks5ProxyHandler);
                    }
                }
            });
        }
    

    建立与服务端的连接:

    protected void doConnect() throws Throwable {
            long start = System.currentTimeMillis();
            //建立与服务端的连接
            ChannelFuture future = bootstrap.connect(getConnectAddress());
            try {
            	//用ret判断连接是否创建成功
                boolean ret = future.awaitUninterruptibly(getConnectTimeout(), MILLISECONDS);
                //下面的代码主要是判断是否连接成功,以及处理一些异常情况
                if (ret && future.isSuccess()) {
                	//得到消费端Channel对象,在下面代码中保存该Channel对象
                    Channel newChannel = future.channel();
                    try {
                    	//下面代码对旧Channel对象oldChannel关闭,如果在启动的时候,oldChannel是null
                        Channel oldChannel = NettyClient.this.channel;
                        if (oldChannel != null) {
                            try {
                                if (logger.isInfoEnabled()) {
                                    logger.info("Close old netty channel " + oldChannel + " on create new netty channel " + newChannel);
                                }
                                oldChannel.close();
                            } finally {
                                NettyChannel.removeChannelIfDisconnected(oldChannel);
                            }
                        }
                    } finally {
                        if (NettyClient.this.isClosed()) {
                            try {
                                if (logger.isInfoEnabled()) {
                                    logger.info("Close new netty channel " + newChannel + ", because the client closed.");
                                }
                                newChannel.close();
                            } finally {
                                NettyClient.this.channel = null;
                                NettyChannel.removeChannelIfDisconnected(newChannel);
                            }
                        } else {
                            NettyClient.this.channel = newChannel;
                        }
                    }
                } else if (future.cause() != null) {
                    throw new RemotingException(this, "client(url: " + getUrl() + ") failed to connect to server "
                            + getRemoteAddress() + ", error message is:" + future.cause().getMessage(), future.cause());
                } else {
                    throw new RemotingException(this, "client(url: " + getUrl() + ") failed to connect to server "
                            + getRemoteAddress() + " client-side timeout "
                            + getConnectTimeout() + "ms (elapsed: " + (System.currentTimeMillis() - start) + "ms) from netty client "
                            + NetUtils.getLocalHost() + " using dubbo version " + Version.getVersion());
                }
            } finally {
                if (!isConnected()) {
                }
            }
        }
    

    dubbo协议对netty的使用给我们提供一个很好的编程参考。其中dubbo协议的实现就是在编解码处理器中完成的。
    从这里我们可以看出,所谓RPC协议本质是通信双方的一个约定,协议是通过编码和解码实现的。

    扩展阅读:
    Netty 之 ChannelOption的TCP_NODELAY属性设置
    Netty端口被占用问题
    Netty学习(五)—IdleStateHandler心跳机制

    展开全文
  • 这里说的发送端,主要是指长期发送定位信息或者有用数据的北斗短报文设备,一般固定在动物、船载、车载、森林、油田等地方。用户给设备供电,设备就会自动定时发送数据。 接收端一般是指固定在用户的楼顶或者开阔...

    完整资料下载链接: https://pan.baidu.com/s/1rs8uAZQZePBV1tffaNqhjA
    提取码: xqsg

    北斗短报文设备都是双向的,既可以发也可以收。
    这里说的发送端,主要是指长期发送定位信息或者有用数据的北斗短报文设备,一般固定在动物、船载、车载、森林、油田等地方。用户给设备供电,设备就会自动定时发送数据。
    接收端一般是指固定在用户的楼顶或者开阔地带,用于接收信息并把信息存储到服务器。
    在这里插入图片描述

    一、发送端
    K2
    K1

    在这里插入图片描述
    二、接收端
    接收端设备数量取决于用户需求,最简单的只需要1台数传蘑菇头用于接收数据即可。而一些专门做北斗短报文运营商的企业,则会有几十台设备用于收发。
    K2
    K1

    在这里插入图片描述
    接收端
    三、服务器端
    服务器端一般由下面组成:
    在这里插入图片描述
    (一)电源模块
    作用是为单卡机、多卡机提供电源
    在这里插入图片描述
    (二)多串口服务器
    在这里插入图片描述
    (三)UPS电源
    作用是避免断电或者电压不稳。
    在这里插入图片描述
    (四)空调
    作用是降温和提供对流风,尤其是在夏季。
    在这里插入图片描述
    部署系统时把服务器主机、多串口服务器、UPS放置在带空调的房间,保持适宜的温度和气流即可。
    (五)单卡机
    在这里插入图片描述
    在这里插入图片描述
    (六)多卡机
    在这里插入图片描述
    (七)指挥机
    在这里插入图片描述
    (八)部署方案
    1、北斗短报文设备安装位置
    推荐选择离机房比较近且空旷的位置,如机房楼顶位置。
    2、线缆布线方式
    推荐使用塑料管道穿线方式。
    在这里插入图片描述
    室外部分线缆通过塑料管道走线,管道进入室内时朝室内一侧管道向上倾斜,避免积水渗入室内,同时室外管道在进入室内的位置适当开个口,用于放掉渗入管内的水分。
    3、安装方式
    推荐采用支架固定式安装。以下按照架设16台北斗多卡设备的安装为例,介绍施工方案。
    A、制作一个1.5米X1.5米的角铁架,直角交叉位置与其他位置间距为0.5米(可根据环境条件调整间隔,但推荐间隔不小于0.5米)
    在这里插入图片描述
    在这里插入图片描述
    B、在交叉位置分别电焊上钢管(管子直径为43mm左右),管子长度根据外墙高度做调整。如周围有围墙的话,建议高度在安装后北斗头高度超过外墙高度(如图红线所示)
    在这里插入图片描述
    在这里插入图片描述
    C、在角铁架四周围住一个2米*2米的木板,居中放置角铁架,倒上水泥、待干后,拆掉木板。以便固定住角铁架的安放位置。
    在这里插入图片描述
    在这里插入图片描述
    D、配合U型锁,将设备固定在钢管上。设备固定安装后,建议对于每个设备套个塑料袋。
    在这里插入图片描述

    展开全文
  • UDP是基于数据报文的传输协议,面向无连接,不可靠,下面介绍发送和接收的Demo: 发送程序:import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io....
  • 文章目录ARP 协议概述报文格式实现Berkeley Packet Filter打开 BPF 设备设置 BPF 文件DNS 解析获取本机 IP地址 MAC地址发送 ARP 报文读取 ARP 报文结果完整源码 继上次 自己实现一个 Ping 命令 之后,尝试进入更...
  • 随着SYNACK报文的发送,连接建立随着第二次握手报文来到客户端。客户端接收到这个SYNACK报文,就认为连接建立了。仍然从TCP层开始分析,依然是由tcp_v4_rcv()入手。 int tcp_v4_rcv(struct sk_buff *skb) { ... ...
  • C# 利用SharpPcap发送和接收自定义的链路层报文(非IP以太网报文),本例子发送的以太网帧类型为0x55aa,IP报文的以太网帧类型为0x0800。 vs2008工程,可编译和测试。
  •  该结构定义了网络连接描述符,本结构是实现接收和发送协议数据核心。该结构定义在include\mysql_com.h  定义如下: typedef struct st_net {  Vio *vio;  unsigned char *buff,*buff_...
  • 1,tcp发送报文工具,可以向服务端发送报文,可以指定服务器IP端口号。 2,TCP接收报文工具,可以在服务器开启一个端口,接收客户端发送的报文
  • QT UDP发送和接收广播报文

    千次阅读 2019-12-24 09:23:57
    这几天整QT UDP的发送和接收,参考了很多的博客文章。只是觉得都不是很详细,所以我今天给个例子: #Client.pro #------------------------------------------------- # # Project created by QtCreator 2019-12-23...
  • 使用Netty发送和接收http报文一些注意事项 近期看了一些《Netty实战》这本书,看完之后有些云里雾里,就想写一个简单http服务端和客户端感受一下,代码不多但是期间还是遇到了一些问题,这里把其中一些坑...
  • 看此篇文章之前可以看看我这篇文章,有助于更好理解webservice这篇文章 http://blog.csdn.net/zhaofuqiangmycomm/article/details/78701566 1,配置文件 ?xmlversion="1.0"encoding="utf-8"?> <...
  • abc b thikdkdkd c 4556 打字机模式, 是 可以这样说 有这样可能 Windows Name Age Weight john li down
  • Linux数据报文接收发送总结2

    万次阅读 2021-02-17 11:45:49
    1. 准备工作 此处重点介绍基础概念,为后面介绍数据包收发打下基础。...内核网络设备驱动是通过中断方式来处理。当设备上有数据到达时候,会给CPU相关引脚上触发一个电压变化,以通知CPU来处理数据..
  • Linux数据报文接收发送总结3

    万次阅读 2021-02-17 12:09:36
    大概了解了网卡驱动、硬中断、软中断ksoftirqd线程之后,我们在这几个概念基础上给出一个内核收包路径示意: 当网卡上收到数据以后,Linux中第一个工作模块是网络驱动。网络驱动会以DMA方式把网卡上...
  • Linux数据报文接收发送总结6

    千次阅读 2021-05-05 21:08:59
    内核实现了网络层ip协议,也实现了传输层tcp协议udp协议。这些协议对应实现函数分别是ip_rcv(),tcp_v4_rcv()udp_rcv()。我们平时写代码方式不一样是,内核是通过注册方式来实现。Linux内核中...
  •  源端口(2个字节):发送报文的进程的16位端口号。  目的端口(2个字节):目的设备上的接收进程的16位端口号。  长度(2个字节):整个UDP数据报的长度,包括首都数据字段。  校验(2个字节):提供...
  • mpl中socket分发器原理基本相同,报文socket分发器可以理解为报文通道静态代理;网络协议family表示当前报文通道网络协议family;多播关系注册器MembershipRegistry,主要是通过一个Map-HashMap来管理多播组...
  • 目前有一个小demo,模拟的是一台机子上的服务器和客户端的发送和接收消息,我打包上传,有兴趣的可以下载看看,网址是:Tcp通信—本机发送接收 https://download.csdn.net/download/yuanyuanluoluo/10356566 项目...
  • /fms_web/src/... //发送报文至核心 byte[] info=Utils.convert(sendMsg); byte[] bMsg = process(info,ip,port); message = new String(bMsg, "GBK");-->mes...
  • XML内容如下 —————————————————————————————————————————————————————— <...本人是个菜鸟,初次接触报文发送内容随便是什么!求源码!
  • 本文介绍了python发送和接收大数据思路: 发送方提供要发送数据长度,接收方根据数据长度,循环接收数据,直到全部接收。并采用自定义header结构体,保证每次数据传送独立。 发送方代码示例: # 自定义...
  • Linux下can总线接收发送功能,实现读取dbc后对报文进行解析与打包,进而发送和接收;实现实时记录can信息功能,保存格式为.csv;实现数据库功能,可以将can数据保存至数据库 The receiving and sending function ...
  • TCP数据发送和接收

    万次阅读 2013-10-25 14:12:20
    TCP通信单位是一个报文,TCP报文包括报文头部和数据... TCP发送缓存和接收缓存,TCP发送窗口和接收窗口,以及拥塞窗口。  TCP可靠传输是通过滑动窗口来实现。TCP滑动窗口单位是字节。  发送窗口中是表
  • 项目需要管控浏览器发送和接收的HTTP报文,挖取报文URL地址进行判断是否允许,在其他windows操作系统中都能正常实现,而在windows10操作系统中,无论是用API钩子技术还是LSP技术去管控connect及send,recv接口,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,143
精华内容 1,657
关键字:

报文的发送和接收