恭喜,你发布的帖子
发布于 2024-05-21 15:53:17
14楼
我最近也在看这个TCP通讯,我之前对这个一无所知,通过阅读资料,我认为“设置"TestDB".TCPtoPC.SedLEN为1000”这个参数就是建立链接时通讯双方协商一致的ShadowBuffer大小应该体现在TCP报头的16位窗口大小中,也就是定义的TCP包DATE的大小。
这个长度对tsend意义有限,建议你使用trcv测试理解一下LEN.
下面是摘录自帮助文档关于面向连接协议的TCP特征描述:
TCP 的特征
TCP 是一种流协议,其中的数据流长度传送给接收方,使其可以接收数据流作为各个 TCP 段。 这意味着在通过 TCP 连接传送数据期间,不传送关于消息开始和结束的信息。 接收方无法通过接收到的数据流段来确定数据流中的一条消息在何处结束,下一条消息又在何处开始。 因此,建议为要接收的字节数(参数 LEN,指令 TRCV/TRCV_C)和要发送的字节数(参数 LEN,指令 TSEND/TSEND_C)分配相同的值。
如果所发送数据的长度和所要求数据的长度不一致,将出现以下情况:
要接收的数据的长度(参数 LEN,指令 TRCV/TRCV_C)大于要发送的数据的长度(参数 LEN,指令 TSEND/TSEND_C):
仅当达到所分配的长度后,TRCV/TRCV_C 才会将接收到的数据复制到指定的接收区(参数 DATA)。 达到所分配的长度时,已经接收了下一个作业的数据。 因此,接收区包含的数据来自两个不同的发送作业。 如果不知道第一条消息的确切长度,将无法识别第一条消息的结束以及第二条消息的开始。
要接收的数据的长度(参数 LEN,指令 TRCV/TRCV_C)小于要发送的数据的长度(参数 LEN,指令 TSEND/TSEND_C):
TRCV/TRCV_C 将 LEN 参数中指定字节的数据复制到接收数据区(参数 DATA)。 然后,将 NDR 状态参数设置为 TRUE(作业成功完成)并将 LEN 的值分配给 RCVD_LEN(实际接收的数据量)。 对于每次后续调用,都会接收已发送数据的另一个块。
具有固定数据长度的接收区可以在 TRCV/TRCV_C 指令中指定,并使用 Ad-hoc 模式的协议版本。
请填写推广理由:
分享
只看
楼主