精华内容
下载资源
问答
  •  该结构定义了网络连接描述符,本结构是实现接收和发送协议数据的核心。该结构的定义在include\mysql_com.h  定义如下: typedef struct st_net {  Vio *vio;  unsigned char *buff,*buff_...

    文章中的源码来自mysql 5.7.10版本。

    1. NET结构

                 该结构定义了网络连接描述符,本结构是实现接收和发送协议数据的核心。该结构的定义在include\mysql_com.h

                     定义如下:

    typedef struct st_net {

      Vio *vio;

      unsigned char *buff,*buff_end,*write_pos,*read_pos;

      my_socket fd;                    /* For Perl DBI/dbd */

      /*

        The following variable is set if we are doing several queries in one

        command ( as in LOAD TABLE ... FROM MASTER ),

        and do not want to confuse the client with OK at the wrong time

      */

      unsigned long remain_in_buf,length, buf_length, where_b;

      unsigned long max_packet,max_packet_size;

      unsigned int pkt_nr,compress_pkt_nr;

      unsigned int write_timeout, read_timeout, retry_count;

      int fcntl;

      unsigned int *return_status;

      unsigned char reading_or_writing;

      char save_char;

      my_bool unused1; /* Please remove with the next incompatible ABI change */

      my_bool unused2; /* Please remove with the next incompatible ABI change */

      my_bool compress;

      my_bool unused3; /* Please remove with the next incompatible ABI change. */

      /*

        Pointer to query object in query cache, do not equal NULL (0) for

        queries in cache that have not stored its results yet

      */

      /*

        Unused, please remove with the next incompatible ABI change.

      */

      unsigned char *unused;

      unsigned int last_errno;

      unsigned char error; 

      my_bool unused4; /* Please remove with the next incompatible ABI change. */

      my_bool unused5; /* Please remove with the next incompatible ABI change. */

      /** Client library error message buffer. Actually belongs to struct MYSQL. */

      char last_error[MYSQL_ERRMSG_SIZE];

      /** Client library sqlstate buffer. Set along with the error message. */

      char sqlstate[SQLSTATE_LENGTH+1];

      /**

        Extension pointer, for the caller private use.

        Any program linking with the networking library can use this pointer,

        which is handy when private connection specific data needs to be

        maintained.

        The mysqld server process uses this pointer internally,

        to maintain the server internal instrumentation for the connection.

      */

      void *extension;

    } NET;

    该变量维护了一个buffer缓存,该缓存既用于读,也用于写。发送报文数据时先将数据包存入该buffer中,当该buffer填满后再发送。读包时。。。。。。

    主要数据成员:

                        compress: 1表示启动压缩协议

                        read_or_writing:  0:没有进行I/O操作   1:读 2:写    

                        pkt_nr: 协议的包序号,防止包错乱

                        compress_pkt_nr:压缩包的包序号

                        return_status:指向当前连接的THD的server_status变量

                       max_packet_size: 值为数据库参数max_allowed_packet的值

                      max-packet: 最初设置为数据库参数net_buffer_length变量的值(缺省为16K),可以增大,最大值为数据库参数max-allowed-packet(缺省为4M)

                        retry_count:认定网络I/O操作失败前应该重试的次数,缺省为10。见函数(sql\net_serv.cc : net_should_retry)

                        remain_buffer:使用压缩协议时,可能会读取超过压缩长度之外的内容,该变量缓存这部分内容。不适用压缩协议时该值无效. 见函数(sql\net_serv.cc: my_net_read)

                 buff_end:当前分配buffer的结尾处。初始化分配max_packet,该指针指向buffer + net->max_packet,见函数(sql\net_serv.cc: my_net_init)

                        length:当前包的长度,不包含包头

                        write_pos:目前缓冲区写入的内容。eg:写一个4字节的整数,该值+4

                        read_pos:目前从缓冲区读取的内容  

                       buffer_length:包缓冲区的长度。如果压缩,缓冲区包含下一个包的前移内容

                       where_b:缓冲区当前读位置的偏移量,值等于read_pos-buffer

                      save_char:缓冲区末尾为0能提高运算效率。给值用于保存原有的值,后续恢复。

                      vio: 封装了对各种套接字进行操作的接口,底层操作套接字进行实际的报文数据的收发

     

    展开全文
  • /fms_web/src/... //发送报文核心 byte[] info=Utils.convert(sendMsg); byte[] bMsg = process(info,ip,port); message = new String(bMsg, "GBK");-->mes...

    /fms_web/src/com/joyintech/business/counter/common/SendUtils.java

    //发送报文至核心
    byte[] info=Utils.convert(sendMsg);
    byte[] bMsg = process(info,ip,port);
    message = new String(bMsg, "GBK");--> message = new String(bMsg, "utf-8");

    当eclipse发送报文乱码时,在java代码中发送和接收的地方都改成utf-8编码即可

    /fms_interf/src/com/joyintech/FmsSaleServer/CommunicateCall/Communicate/SocketServer/SocketServerWork.java、

    BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()),"utf-8");

    转载于:https://www.cnblogs.com/ljsn/p/6039126.html

    展开全文
  • 首先,我们要构建一个场景,一个服务端和一个客户端,连接建立之后,客户端一直给服务端发送数据,而服务端程序并没有及时读取接收到的数据,即让服务端线程阻塞,数据一直留在TCP缓冲区中,然后某个时间点,服务端突然关闭...

    首先,我们要构建一个场景,一个服务端和一个客户端,连接建立之后,客户端一直给服务端发送数据,而服务端程序并没有及时读取接收到的数据,即让服务端线程阻塞,数据一直留在TCP缓冲区中,然后某个时间点,服务端突然关闭连接,这个时候TCP就会发送一个RST给客户端.

    在这里我们使用Netty构建这样的场景.并不会贴出所有代码,文章内容要求你对Netty有比较高的认识.

    服务端核心代码

    @Override
        protected void channelRead0(ChannelHandlerContext ctx, String msg) throws  Exception{
    
            Thread.sleep(1000 * 60);
            
            ctx.channel().close();
        }
    

    这里先让服务端线程睡眠60秒,就是让它不读取TCP接收缓冲区的数据,在这个时间段内客户端疯狂发送数据给服务端,让服务端的TCP接收缓冲区里的数据一直增多.
    60秒之后,服务端突然关闭连接,这个时候,其实TCP接收缓冲区里面的数据就被丢弃了.

    客户端核心代码

    @Override
        protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
    
            for (;;) {
                Thread.sleep(1000 * 3);
                ctx.writeAndFlush("xxoo");
            }
        }
    

    客户端疯狂给服务端发送数据.

    我们通过Wireshark观察
    在这里插入图片描述
    三次握手之后,客户端疯狂给服务端发送数据.

    我们再通过netstat命令查看服务端TCP接收缓冲区数据
    在这里插入图片描述
    在这里插入图片描述
    服务端TCP接收缓冲区数据一直在增多.等到我们设置的60秒时间到之后,服务端关闭连接,这个时候在看Wireshark

    在这里插入图片描述
    服务端向客户端发送了RST.

    服务端操作系统TCP模块,在服务端关闭连接的时候,发现接收缓冲区还有未处理的数据,于是向客户端发送RST, 如果接收缓冲区没有数据的话,那么就是正常的四次挥手过程.

    接收端Netty出现异常
    在这里插入图片描述

    请关注我的个人网站和公众号


        个人网站
    微信公众号

    展开全文
  • HTTP报文解析器

    千次阅读 2013-02-05 23:03:13
    1. 首先main函数里给全局接收参数的变量赋值 2. socket连接,监听通过该服务器的报文 3. 由于client是一个FILE *类型,即一个文件缓冲区,可以把buffer还原成为一个request结构体里。 4. 发出request...

    1. 首先main函数里给全局接收参数的变量赋值

    2. socket连接,监听通过该服务器的报文


    3. 由于client是一个FILE *类型,即一个文件缓冲区,可以把buffer还原成为一个request结构体里。


    4. 发出request报文,截获response。


    看起来很简单是不,其实最核心的是后续的parse部分,现在只是可以show出里面的内容了。Don't be evil!!!大笑


    展开全文
  • 其原因是主动关闭socket时,若接收buffer里还有报文尚未收取,则本段将以rst包替代正常情况下的fin包。 详细的代码在net/ipv4/tcp.c的tcp_close()函数中有注释解释。这里先记一笔,留作再仔细分析。 转载于:...
  • 网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一个主机都能够向其他主机通信(即传送或接收各种形式的数据)。 在网络核心部分起特殊作用的是路由器(router)。 路由器是实现分组.
  • 这篇笔记分析了连接跟踪子系统框架部分的核心代码实现,涉及文件主要有: ...数据包skb就是通过该函数进入连接跟踪子系统的,对于发送报文,从LOCAL_OUT点进入,对于接收报文,从PRE_ROUTING点进入。 u...
  • AJAX核心技术

    2020-11-11 23:50:02
    2. 后台服务器接收到请求后, 调度服务器应用处理请求, 向浏览器端返回HTTP响应(响应报文) 3. 浏览器端接收到响应, 解析显示响应体/调用监视回调 2. HTTP请求报文 1. 请求行: 请求方式/url 2. 多个请求头: 一个请求...
  • 假设我们在浏览器中输入了一个网址,得到了下面的 html 文件,渲染... <... <head> ...浏览器通过 HTTP 协议接收到的文档内容是字节数据,下图是抓包工具截获的报文截图,报文内容为左侧高亮显示的区域(为...
  • 在传统的 x86 网络协议栈中,网络报文通过网卡硬件接收/发送,都需要发送中断到 CPU,一次中断需要保存/恢复处理器状态,并运行中断服务程序,整个过程至少需要 300 个处理器时钟周期。对于需要处理大规模数据的高...
  • UDP网络编程核心

    2020-09-18 08:20:31
    网络两端接收消息或发送消息的对象(监听本机端口、发送消息、接收消息) 数据包对象(包含目的地IP和端口信息,数据报文信息) DatagramSocket:客户端/服务器端网络Socket端口对象 构造方法 Datagra...
  • 2.前置机将接收的到的报文签名整合,再转发到银行服务器 3.返回报文到前置机,最终返回到ERP 4.注意:使用gbk编码 2.核心类(java): package com.ziniu.pay.util; import lombok.extern.slf4j.Slf4j; import org....
  • 2017年11月15日,北京国电高科科技有限公司研制的UHF频段DCS(Data Collecting System)...DCS载荷是开展物联网星座应用的核心模块,其本质上是一种天基短报文通信系统,用于接收分散于全球的各类终端上行数据,存储...
  • 数据包skb就是通过该函数进入连接跟踪子系统的,对于发送报文,从LOCAL_OUT点进入,对于接收报文,从PRE_ROUTING点进入。该函数的功能是实现对数据的连接跟踪,更新连接跟踪项的连接状态,目前就是根据五元组识别一...
  • TCP的相关知识点参考专栏文章:计算机网络核心知识–1.2 TCP的三次握手 UDP的报文结构: UDP的特点: (1)面向非连接。 传输数据时,源端和终端不建立连接,当它想传送时,就简单地去抓取来自应用程序的数据,并尽...
  • 相返可以接收或发送数据包,而远程地址包含在数据包中。除了UDP没有TCP一样使用安全,这就是说,采用UDP发送数据不保证发出的数据报文一定会被收到。仅有的保证是要么完整收到要么没收到。也就是说不能发送超过网卡...
  • 关闭监听句柄,不在接收新的请求进来,当前请求处理完毕之后关闭 关闭空闲连接,将空闲未工作的进程关闭 循环上述三步,在循环中等待全部连接关闭 退出进程 TCP/IP协议报文结构 事件驱动 Nginx 是一...
  • 指的是发送端发送数据后,重传数据前等待接收方收到该数据报文的ack时间。 RTO设置对重传很重要 1、设长了,重发慢,效率差 2、设短了,重发快,增加网络堵塞,更多的超时导致更多的重发。 TCP协议使用自适应算法 ...
  • 在上一篇文章中,着重分析了 SDK的 核心调度线程yield,本文再简单的分析下用户 事件调度 ...若SDK占有独立线程, 该函数只将接收到的网络报文分发到用户的回调函数中, 否则表示将CPU交给SDK让其接收网络报文并将消息...
  • 网络协议系列之八:TCP差错控制

    千次阅读 2016-03-28 15:45:14
    确认是接收端用来证实确实收到了报文,在TCP中,使用的是累计确认,接收端会告诉发送端其下一个希望接收的字节编号。超时重传是差错控制的核心。实际上当发送端发送一段字节的数据后,会把这个报文段保存在一个队列...
  • 一、问题背景 我们系统调用银行核心接口,通讯方式是Socket,报文格式是XML。... 这种情况首先排查接收报文,报文是类似这样的(真实报文内容不是这样的): 错误的回执二、解决思路 1. 从源头出发 遇到这个...
  • 介绍了SJA1000器件性能,重点介绍节点硬件设计,基于CAN协议栈的节点应用程序设计,软件包括CAN节点初始化、RS232报文发送、RS232报文接收、CAN报文发送和CAN报文接收,并在Keil C51编译器上编译、调试,大大提高了...
  • 介绍了SJA1000器件性能,重点介绍节点硬件设计,基于CAN协议栈的节点应用程序设计,软件包括CAN节点初始化、RS232报文发送、RS232报文接收、CAN报文发送和CAN报文接收,并在Keil C51编译器上编译、调试,大大提高了系统...
  • SWIFT电文类型及格式

    千次阅读 2017-09-23 20:07:41
    (1)用户报文,用于SWIFT会员用户之间相互发送和接收报文,也是SWIFT报文核心和最复杂的内容,MT1XX——MT9XX类报文都属于用户报文。 (2)系统报文(System Message),用户SWIFT系统反馈信息给SWIFT用户的...
  • 因特网无疑是人类有史以来最伟大的设计,它互联了全球数亿台计算机、通讯设备,即便位于...简而言之,『协议』就是指如果发送和接收方按照这个规则进行数据报文的发送,即可在基本的数据传输之上得到某些特殊的功...
  • 内核版本:2.6.34 实现思路:  报文在网络协议栈中的流动,对于接收来讲,是对报文...但无论报文怎样的流动,核心报文所在设备(skb->dev)的变化,相当于各层之间传递的交接棒。  按照上述思路,brcm协议接收
  • 摘要:采用独立CAN控制器SJA1000作为CAN总线/RS232智能电平转换器的核心...节点初始化、RS232报文发送、RS232报文接收、CAN报文发送和CAN报文接收,并在Keil C5l编 译器上编译、调试,大大提高了系统设计的实用性。
  • 计算机网络-运输层

    2021-06-10 20:24:20
    运输层协议只工作在端系统中, 负责将报文移动到网络层, 对报文如何在网络核心移动并不做规定. 将主机间交付扩展到进程间交付被称为多路复用与多路分解 多路复用与多路分解 多路分解: 在接收端, 运输层检查运输层...
  • 提到网络协议栈,数据的收发是核心,我们先来看下数据的接收函数 netif_receive_skb()。 先统一介绍下数据收发 。 对于linux内核来说,网络报文由网络设备来进行接收。设备驱动程序从网络设备中读取报文,通过内核...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 138
精华内容 55
关键字:

核心接收报文