跳到主要内容
版本:2.0

传输大于64K的数据

定义

命名空间:TouchSocket.Sockets
程序集:TouchSocket.dll

一、说明

UDP由于自身限制,每次发送的数据包最大约64K,但是在局域网内,有时候希望传输更大的数据。所以必须有策略发送。

TouchSocket可通过简单设置,实现该功能。

二、使用

只需要在配置中,设置其适配器为UdpPackageAdapter类型即可(默认为NormalUdpDataHandlingAdapter)。同时可以根据传输数据的大小,修改相关属性,如:MTUTimeout等。

UdpSession udpSession = new UdpSession();
udpSession.Received = (endpoint, byteBlock, requestInfo) =>
{

};

udpSession.Setup(new TouchSocketConfig()
.SetBindIPHost(new IPHost($"127.0.0.1:7789"))
.SetUdpDataHandlingAdapter(()=> new UdpPackageAdapter()));//加载配置
udpSession.Start();//启动
注意

此模式下,发送端与接收端均必须为TouchSocket(或实现相同算法),且为相同设置。

三、原理

在发送时,会将要发送的数据分割成MTU长度的数据。然后为其编号,然后发送,最后由接收方重组。

3.1 数据格式

ID:由雪花算法生成,在并发请求时1毫秒中有400w分之一的概率发生ID重复。但基本可以忽略不计。

Bit说明76543210
协议名
byte1PackageID为long类型,占用8字节,标识数据包唯一性。
byte2
byte3
byte4
byte5
byte6
byte7
byte8SN为Ushort占2字节,标识帧序
byte9
byte10flag,占1字节,最高位标识是否为结束,其他位保留。1
byte?有效载荷数据
byte^2当不为终结帧时,此处仍然为载荷数据。当是终结帧时,倒数两个字节为Crc16校验。
byte^1