不允许用FTP 只能HTTP POST请求
我的方案是分包上传
但是发现tcp_write里面TCP_SND_BUF 默认是2*TCP_MSS, 而TCP_MSS默认536,最大1426
也就是TCP_SND_BUF最大2852,这个可以调大么。
另外网上有个方案 我进行了调整
[C] 纯文本查看 复制代码 err_t tcp_client_senddata(uint8_t *send_buf, int size)
{
int try_time = 0;
int send_pack_index = 0;
if(size == 0)
return 0;
err_t err_status;
int sizemax = TCP_SND_BUF - 20; // 这里实际最大TCP_SND_BUF ,保守-20
send_pack:
if(try_time >= 10)
{
return -1;
}
if(size == 0)
return 0;
if(size <= sizemax)
{
err_status = tcp_write(cg_tcp_pcb, &send_buf[send_pack_index * sizemax], size, 1);
if(err_status != ERR_OK)
{
if(err_status == ERR_MEM)
{
// printf("TCP发送失败!数据太长%u\n", size);
HAL_Delay(5);
try_time ++;
goto send_pack;
}
else
{
printf("TCP发送失败!\n");
//tcp_err(cg_tcp_pcb, client_err);
}
return -1;
}
//立刻发送
if(tcp_output(cg_tcp_pcb) != ERR_OK)
{
printf("TCP发送失败!\n");
return -1;
}
return 0;
}
else
{
// printf("数据大于sizemax,分包发送! %u\n",send_pack_index);
err_status = tcp_write(cg_tcp_pcb, &send_buf[send_pack_index * sizemax], sizemax, 1);
if(err_status != ERR_OK)
{
if(err_status == ERR_MEM)
{
// printf("TCP发送失败!数据太长%u\n",size);
HAL_Delay(5);
try_time ++;
goto send_pack;
}
else
{
printf("TCP发送失败!\n");
//tcp_err(cg_tcp_pcb, client_err);
}
return -1;
}
//立刻发送
if(tcp_output(cg_tcp_pcb) != ERR_OK)
{
// printf("TCP发送失败!\n");
return -1;
}
try_time = 0;
size -= sizemax;
// printf("发送完成! 剩余 %u 字节需要发送\n",size);
send_pack_index ++;
goto send_pack;
}
}
这样这边分包发送倒是不报错,但是服务器那边接收不到
报错Processing of multipart/form-data request failed. Unexpected EOF read on the socket
像是只读到第一个包就结束了 然后判断没有正常结束就返回异常了。
是哪里写的有问题么 |