zoukankan      html  css  js  c++  java
  • 网络编程-黏包现象

    一.什么是黏包:

          同时执行多条命令之后,得到的结果很可能只是一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种现象就是黏包.

    注意:只有tcp有黏包现象,udp永远不会黏包

    二.基于tcp制作一个远程执行命令的程序 (subprocess模块)

    import subprocess
    res = subprocess.Popen(cmd.decode(gbk),shell= True,stdout = subprocess.PIPE,stderr = subprocess.PIPE)
    stdout = res.stdout.read()
    stderr = res.stderr.read()print(stdout)
    print(stderr)
    
    
    说明:
    cmd:代表系统命令
    shell:True 代表这条命令是系统命令,告诉操作系统,将cmd当成系统命令执行
    stdout:是执行完系统命令之后,用于保存结果的一个管道
    stderr:是执行完系统命令之后,用于保存错误结果的一个管道
    
    结果的编码是以当前所在的系统为准的,如果是windows,那么res.stdout.read()读出的就是GBK编码,在接收端需要用GBK编码

    三.黏包成因:

          发送端发送数据,接收端不知道应该如何去接收,造成的一种数据混乱的现象

      1.合包机制(nagle算法):将多次连续发送且间隔较小的数据,进行打包成数据传送

      2.拆包机制:在发送端,因为受到网卡MTU限制,会将大的超过限制的数据,进行拆分,拆分成多个小的数据,进行传输,当传输到目标主机的操作系统会重新将多个小的数据合并成原来的数据.

  • 相关阅读:
    zeromq和czmq编译
    Future Pattern
    国外程序员是如何准备面试的
    附加数据库后,给所有者赋权
    利用FastCopy迁移应用数据
    持续集成之“Everything is code”
    利用SQLyog实现mysql自动备份
    LinkedIn已将可自定义的索引引擎IndexTank开源
    Hillstone安全网关相关问题收集
    Install Toad for Oracle 10.6 on Winows 7 X64
  • 原文地址:https://www.cnblogs.com/ITdong-1/p/9475497.html
Copyright © 2011-2022 走看看