请教lwip问题,tcp

请教lwip问题,tcp,第1张

你的问题不是很详细

如果是不知道位置:在LWIP的tcp_active_pcbs==tcp_active_pcbs->next

如果是非阻塞的方式运行:

现在的用法,还是用sys_thread_new创建的,在tcpclient中这样处理的,但连接如果是server主动断掉可以检测到,但如果是其他原因,如网络错误之类的就检测不到了。

int fd

FD_ZERO(&fdR)

FD_SET(sock, &fdR)

switch (select(sock + 1, &fdR, NULL,NULL, &timeout))

{

case -1:

{

lwip_close(sock)

rt_free(recv_data)

recv_data = RT_NULL

GPIOB->BSRR = GPIO_Pin_5//灭灯

return 0

}

case 0:

break

default:

{

if(FD_ISSET(fd,&fdR))

{

int nread

ioctlsocket(fd,FIONREAD,&nread)

if(nread == 0)

{

//close

lwip_close(sock)

rt_free(recv_data)

recv_data = RT_NULL

GPIOB->BSRR = GPIO_Pin_5//灭灯

return 0

}

else

{

bytes_received = recv(sock, recv_data, 1024, 0)

if(bytes_received == 0)

{

//close

lwip_close(sock)

rt_free(recv_data)

recv_data = RT_NULL

GPIOB->BSRR = GPIO_Pin_5//灭灯

return 0

}

else

{

recv_data[bytes_received] = '\0'

//*****数据解析*******

if(Check_frame(recv_data) == 1)

{

link((u8_t *)recv_data,sock)

}

}

}

}

break

}

}

首先物理层要支持,比如支持10Mbps的以太网最快可以传输1M/S,支持100Mbps的以太网最快能传10M/S

其次,物理层支持的速度很大了,你的板子处理能力也要跟上,如果你用Cortex-M3或者ARM7这类单片机的话,是别想提过速度了,能达到270KB都相当好了

如果你的物理层和板子的处理速度都满足要求,那么通过配置lwip可以提高速度的,比如提高缓存包大小,使能IP分片

另外,lwip是为小型嵌入式设计的,目的是传输小数据包(每包数据不大于以太网最大的帧长:1500字节),所以你要用于很大数据量的以太网传输,lwip并不适合.

我用过stm32F107以太网通讯,单片机作为客户端与PC机服务端通讯, 需要移植Lwip协议栈,Lwip协议栈提供了UDP、TCP、Socket 的API函数,使用时直接调用建议你先看看此开发板自带的例程源码,里面用了Lwip实现了telnet、http、ftp通讯。如果你没有的话,我可以发给你。 至于你说的其他两个,我没用过,抱歉。你可以看看例程源码里有没有相关的使用例子。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8177211.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存