请教WebServer Request请求分包如何合并处理?

先把三个问题列一下:

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

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

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


问题1的具体情况:

我使用的是32V208RUB6,基于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


您好,关于第一个问题,可以根据HTTP报文的结尾来判断收到的命令请求是否收完,等全部收完再进行数据处理,第二个问题的话,可以适当减小定义的数组大小来节省内存,第三个问题我这边目前没有复现,测试是正常的,使用网络例程的时候可以把防火墙关掉,后续可以通过邮箱沟通一下:kx@wch.cn


只有登录才能回复,可以选择微信账号登录