• [转]一些TCP和UDP使用问题汇总


    下面是在实际后台开发中遇到的一些关于TCP和UDP的问题,这里慢慢积累起来:

    UDP连续发送2次数据包,第一次发100字节,第二次发200字节,服务端recvfrom(1000)时收到100、200还是300字节?

    *:正常情况下为100字节

    *:网络乱序:可能由于网络原因导致数据包乱序到达,则会收到200字节。故可在自定义UDP协议头加一个序列号标识

    *:UDP是数据报文协议,每个数据包是独立的,客户端sendto多少个UDP包,服务端就得recvfrom多少次,数据包不会合并

    TCP连续send2个数据包,第一次发100字节,第二次发200字节,服务端recv(1000)时收到100、200还是300字节?

    *:TCP粘包:如果recv时两个数据包都已经到达,则为300字节

    *:如果recv时只有100字节的数据包到达,那当然也只有100字节了

    *:TCP是流传输协议,tcp/ip协议栈会自动合并TCP包,保证包的完整性。但这样本来不相关的包也会粘包,这需要用户进程自己来处理

    如何处理TCP粘包现象?

    * 一种常见的方法就是使用TLV包格式:即Type类型, Length长度,Value值,其中Type和Length长度固定。如当Type为1字节,Length为4字节,则先recv(5)接收5个字节,判断包类型并获取包长度len,然后recv(len)接收包体并按类型解析

  • 相关阅读:
    JavaScript函数节流与函数去抖
    [概念] js的函数节流和throttle和debounce详解
    进度3_家庭记账本App_Fragment使用SQLite实现简单存储及查询
    网格视图GridView
    SQLite数据库以及增删改查的案例
    进度2_家庭记账本App
    进度1_家庭记账本App
    家庭记账本初步构想
    WebView的学习
    App基本界面组件案例
  • 原文地址:https://www.cnblogs.com/xuyuan77/p/5737413.html
Copyright © 2020-2023  润新知