Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
LWIP
tcpclient
10
LWIP下TCP作为客户端,连续断开连接同一服务器,就连不上
发布于 2022-08-20 10:24:05 浏览:1126
订阅该版
硬件:STM32F407VCT6+LAN8720 软件:LWIP(TCPClient) 下面是使用到tcpclient的部分代码,作用是将传进线程的IP和发送信息发出后,等待1s接收就关闭线程 ```c static void set_tcp_net_thread(void *arg) { int sock = -1; struct hostent *host = RT_NULL; struct sockaddr_in server_addr; mytcpclient clnt_param = { .ip_port = client_param.ip_port, //send port .ip_type = client_param.ip_type, //send port .ip_addr = client_param.ip_addr, .ip_data = client_param.ip_data, .ip_datalen = client_param.ip_datalen, }; {//作用:局部定义变量不会报错 rt_uint8_t i = 0; for(i=0;i<3;i++) // 轮询检查待发送数据需使用的IP和端口号是否已经创建过接收信息的线程;作用:避免出现相同IP和端口号再socket导致数据接收有问题 { if((strcmp(tcpclient_send_msg[i].ip,clnt_param.ip_addr)==0) && tcpclient_send_msg[i].port == clnt_param.ip_port) { send(tcpclient_send_msg[i].sock, clnt_param.ip_data, clnt_param.ip_datalen, 0); return ; } } } /* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */ host = gethostbyname(clnt_param.ip_addr); if (host == RT_NULL) { LOG_D("Get host by name failed!\n"); return ; } /* 创建一个socket,类型是SOCKET_STREAM,TCP类型 */ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { /* 创建socket失败 */ LOG_D("Create socket error\n"); goto __exit; } /* 初始化预连接的服务端地址 */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(clnt_param.ip_port); server_addr.sin_addr = *((struct in_addr *)host->h_addr); rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero)); /* 连接到服务端 */ if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { /* 连接失败 */ LOG_D("Connect fail!\n"); goto __exit; } /* 发送数据到sock连接 */ send(sock, clnt_param.ip_data, clnt_param.ip_datalen, 0); {//作用:局部定义变量不会报错 char recv_data[8] = {0}; rt_uint8_t data_len = 0; recv(sock, recv_data, data_len - 1, 0); // LOG_D("recv data :%s\r\n",recv_data); } __exit: if (sock >= 0) { LOG_D("colse socket:%d",sock); closesocket(sock); // sock = -1; //没有用,每次打开线程会重新赋值 } return ; } ``` 下图是设置的TCP套接字个数 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20220820/24b3a2a31bc4ca21213b6ace84c994e9.png.webp) TCP设置套接字个数 == N 当连续N次后的连接断开后,就会提示“Create socket error”; 不过等上几秒后,再N次连接断开,问题就重现,提示“Create socket error” 个人认为是内存没有释放完导致的,即使调用了closesocket 问题:怎么解决tcp客户端连续连接断开,而不会造成socket错误?
查看更多
aozima
2022-08-20
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
`msh>netstat`
4
个回答
默认排序
按发布时间排序
李肯陪你玩赚嵌入式
认证专家
2022-08-20
2022年度和2023年度RT-Thread社区优秀开源布道师,COC深圳城市开发者社区主理人,专注于嵌入式物联网的架构设计
可以把socket返回的句柄sock打印下;如果是socket句柄未释放的话,理论上sock的值会一直递增,直至N值。 曾经排查过类似的问题,可能对你有些帮助:[一种导致socket内存泄露的排查思路](https://recan.blog.csdn.net/article/details/123193449 "一种导致socket内存泄露的排查思路")
sync
2022-08-22
这家伙很懒,什么也没写!
[文档里面有客户端的例子](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/components/network/an0011-network-started?id=%E5%9F%BA%E7%A1%80%E5%BA%94%E7%94%A8%E7%A4%BA%E4%BE%8B "文档里面有客户端的例子")的,楼主可以先用例子测试下,可以正常工作不,排除法试试
Jhonson_Alan
2022-08-22
这个懒很人,写也没啥
感谢各位回复,问题解决了 通过`msh>netstat`的信息,知道断开的`sock`会短暂卡在`FIN_WAIT_2`的状态上,虽然不知道为什么会这样(网上有的说法是服务器不发FIN) 我的解决方法的调节`FIN_WAIT_2`的超时时间 `#define TCP_FIN_WAIT_TIMEOUT 10000 //20000 /* milliseconds */`
撰写答案
登录
注册新账号
关注者
0
被浏览
1.1k
关于作者
Jhonson_Alan
这个懒很人,写也没啥
提问
9
回答
12
被采纳
1
关注TA
发私信
相关问题
1
RT-THREAD在STM32H747平台上移植lwip
2
{lwip}使能RT_LWIP_DHCP时可以获取到ip
3
stm32f103 LWIP 2.0.2 TCP收发问题
4
lwip2.1不重启修改IP
5
关于网络协议栈的测试
6
可否将LWIP升级到2.1.2 和 2.0.3?
7
socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
8
tcpclient 插拔网线问题?
9
两个tcpclient同时通讯可以吗?
10
SO_BINDTODEVICE 未定义该如何解决
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
16
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部