问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请教lwip问题,tcp

发布网友 发布时间:2022-05-07 12:24

我来回答

1个回答

热心网友 时间:2023-10-30 18:25

你的问题不是很详细
如果是不知道位置:在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;
}
}

热心网友 时间:2023-10-30 18:25

你的问题不是很详细
如果是不知道位置:在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;
}
}

热心网友 时间:2023-10-30 18:25

你的问题不是很详细
如果是不知道位置:在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;
}
}

热心网友 时间:2023-10-30 18:25

你的问题不是很详细
如果是不知道位置:在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;
}
}

热心网友 时间:2023-10-30 18:25

你的问题不是很详细
如果是不知道位置:在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;
}
}

热心网友 时间:2023-10-30 18:25

你的问题不是很详细
如果是不知道位置:在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;
}
}

热心网友 时间:2023-10-30 18:25

你的问题不是很详细
如果是不知道位置:在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;
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑界面图标为什么有个小箭头电脑桌面上的图标有小箭头怎么清除 河山造句 表达想要游遍祖国大好河山的诗句 看到这儿,我不禁想到:祖国的大好河山多么雄伟壮丽啊!改为陈述句 三峡风光最后一句改为陈述句 曲靖新公司注册 广东省财务服务公司名单 广东财务咨询公司名录 淘宝如何更换主图不降权?注意这三点就行! 淘宝宝贝主图怎么更换?更换步骤介绍! 淘宝换主图怎么换?如何优化主图? 2018年广东高考450能上二本吗 STM32F107+LWIP怎样判断网络已经连接成功或断开的 lwip tcp连接,长时间没有数据,会断掉吗 广东多高考分数线公布 2018广东高考456分,文科,可以报什么本科公立大学? 北京灵山风景区 遂宁灵山寺风景区电话 门头沟灵山风景区官网 北京灵山风景区这个季节开了吗?有好些的农家乐吗 葫芦岛灵山景区的接待电话 北京灵山地址 门头沟灵山自然风景区电话 宝应八项规定后事业单位烟酒能报销吗? 关于2014年 江苏省事业单位考试内容的疑惑 扬州宝应事业单位考试考几科?考什么?总分多少 宝应县事业单位拖欠工资,请不要告诉我上什么霉体 宝应交通运输局是事业单位吗 宝应进事业单位,体检血压要求多少 2012江苏省宝应县音乐教师编制要考哪些内容啊 事业单位中医笔试分数线 2018广东高考填报志愿,理科488分 lwIP求助,关于socket编写TCP服务器的问题 预判一下2018年广东高考3a和本科的录取分数线 如何在TCP Server端解决出现断网/断电后,让Client端断开连接? lm3s + ucos + lwip 做2个基于TCP的服务器,激活一个之后,另一个就连接不上,求解 本命年梦到上班被警察抓代表什么? 镇原县2022中考生有多少人 甘肃省镇原县属于那个市 镇原县有多少个乡镇 甘肃镇原 镇原气候特点 镇原县的行政区划 镇原县有多少人口 镇原县的名胜古迹 镇原县的经济 甘肃镇原县为什么叫镇邑? 镇原县的人口民族 镇原县的著名人物 FC勇者斗恶龙7中文攻略 《fc勇者斗恶龙7》都有哪些攻略?