找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

143

积分

0

好友

12

主题
发表于 2023-9-10 22:03:24 | 查看: 301| 回复: 1 IP:中国 中国广播电视网络有限公司

先把三个问题列一下:

1、TCP接收的分包如何合并 ??

2、WEB Server占用内存如何减少?64K都快被它用完了。

3、23年9月的例程如何才能正常工作 ?

问题1的具体情况:

我使用的是CH32V208RUB6,基于22年1月WCHNET_LIB_VER=15 版本例程上修改时发现,

浏览器端请求包超过800字节后会被分包处理,造成后续包中的数据丢失(第一个包能被识别为HTTP数据,分包后的数据被识别为ERR数据)。

在数据接收函数中看不出和分包有关的处理

void WCHNET_HandleSockInt(u8 socketid, u8 intstat) {
  u32 len;

  if (intstat & SINT_STAT_RECV)  //receive data

  {

    len = WCHNET_SocketRecvLen(socketid, &bufAddr);

    printf("\r\n - - - - - WCHNET_SocketRecvLen %d? socket id %d\r\n", len, socketid);

    if (len) {

      WCHNET_SocketRecv(socketid, RecvBuffer, &len);

      DealDataflag = 1;

      socket = socketid;

    }
}

特此请教该 如何合并分包?谢谢 !

分包数据有时候会在串口重复输出多次:

HTTP Method=3? Post

URL name: success.html

提交的内容__PMAC=1.2.3.4.5.6&__PSIP=192.168.1.10&__PMSK=255.255.255.0&__PGAT=192.168.1.1&__PMOD=1&__PSPT=1000&__PDIP=192.168.1.240&__PDPT=1000&__PUSE=admin&__PPAS?

?- - - - - WCHNET_SocketRecvLen 6? socket id 2

收到 6 字节,addr=0x200015f8?

=12345

接收数据打印完毕

?

HTTP Method=0? Error

URL name: success.html

?- - - - - WCHNET_SocketRecvLen 6? socket id 2

收到 6 字节,addr=0x200015f8?

=12345

接收数据打印完毕

?

HTTP Method=0? Error

URL name: success.html

TCP Disconnect

TCP Connect Success

问题3相关数据:

23年9月18的版本上传后不工作,没能测试WebServer是否存在分包的问题。

23年9月18版本串口打印如下:但是网不通,无法PING通,无法打开 网页

WEB SERVER

SystemClk:120000000

net version:18

WEB SERVER

SystemClk:120000000

net version:18

ip: 192.168.1.10.

mac addr: 1 2 3 4 5 6?

WCHNET_LibInit Success

SocketIdForListen 0

desport: 1000, srcport: 1000

desip:192.168.1.100

mode 1

__ASIP = 1.2.3.4.5.6

__ASIP = 192.168.1.10

__AMSK = 255.255.255.0

__AGAT = 192.168.1.1

__AMOD = 1

__ASPT = 1000

__ADIP = 192.168.1.100

__ADPT = 1000

__AUSE = admin

__APAS = 123

PHY Link Success

TCP Timeout

desport: 1000, srcport: 1000

desip:192.168.1.100

mode 1

TCP Timeout

发表于 2023-9-10 23:37:31 IP:中国 中国广播电视网络有限公司

对于第一个问题,当浏览器端请求包超过800字节时,会被分包处理,这可能会导致后续包中的数据丢失。如果您想合并分包,可以尝试使用TCP协议中的粘包技术。具体而言,您可以在接收数据时检查数据长度,并将多个数据包合并为一个完整的数据包。这样可以避免数据丢失和重复输出等问题。

对于第二个问题,可以尝试优化代码以减少内存使用量。例如,可以使用动态内存分配来减少静态内存使用量。此外,还可以考虑使用更高效的算法和数据结构来减少内存使用量。

对于第三个问题,请确保程序没有错误,并且正确地连接了网络。如果程序没有错误并且网络连接正常,则可能存在其他问题。在这种情况下,建议查看程序日志以获取更多信息。

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|国产电子社区 ( 沪ICP备2023018578号-1|

苏公网安备 32011102010465号


)|网站地图

GMT+8, 2024-7-27 14:04 , Processed in 0.066150 second(s), 24 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表