
如果是不知道位置:在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通讯。如果你没有的话,我可以发给你。 至于你说的其他两个,我没用过,抱歉。你可以看看例程源码里有没有相关的使用例子。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)