Microchip
直播中

杨叶

7年用户 168经验值
私信 关注
[问答]

为什么删除电缆后无法重新启动TCP连接?

大家早上好,我正在使用PIC32MX512795L,我想知道是否可以删除TCP电缆,然后重新插入,并允许板自动重新连接。目前,使用KEEP_ALIVE_TMO,我可以在连接正常关闭(FIN序列)时和电缆突然断开时都感觉到。在后者,相反,它不起作用。有什么想法?谢谢您。

回帖(7)

李勇进

2019-10-30 08:18:03
您好,rainad,我删除了KEEP_ALIVE选项,但是在序列断开并重新连接之后,通信不会重新启动。是否可能断开电缆,TCPIP堆栈的较低层出现故障,我必须重新初始化它们?我还尝试用TCPIpStAcKyStand(SysObj.TCPIP)重新启动TCPIP状态机。但未遂。有什么建议吗?谢谢您。
举报

云达贞

2019-10-30 08:25:02
您能详细介绍一下您想要完成的工作吗?-所以您有一个TCP客户机和一个服务器套接字(哪个在PIC32端?)而且它们连接得很好,您可以在它们两个之间发送消息。-通信是空闲的,因为KEEP_ALIVE被禁用,所以没有数据传输。-您断开ETH电缆,然后您重新连接-堆栈恢复其IP地址,这与前面的地址相同,因为重新删除电缆(您使用DHCP还是静态地址?)-例如,您可以适当地ping板-现在您尝试从客户端向服务器发送数据,并且没有用wireshark显示或由另一方报告的通信量。让我知道是否正确地获得了序列,以及这是否是您尝试做的。TCPIP_STACK_.(sysObj.tcpip)刚刚返回堆栈状态,无法通过该调用重新启动任何内容。如果要重新启动堆栈或该接口,需要调用:TCPIP_STACK_Deinitialize/TCPIP_STACK_InitializeorTCPIP_STACK_NetDown/TCPIP_STACK_NetUp。打开,连接,等等。
举报

李勇进

2019-10-30 08:40:46
你好,雷诺德,谢谢你的回答。黑板上有一个tcp_client、一个tcp服务器套接字和一个web服务器。现在我只使用实现modbus的服务器套接字来与显示器通信,它工作正常。我的目的是:找出显示器何时断开连接并能够重新启动通信。重新连接到显示器。当我回答你的问题时,即使还存在一些问题,我还是让它工作。基本上,我保持了与演示项目相同的设置,因此启用了DNS和DHCP客户端。删除DHCP客户端,我可以恢复通信,即使它可以占用1-2分钟。请参阅TCP设置附件。它对您是否合适?关于确定通信是否活跃,我总是启用keep.timeout,并定期调用TCP_IsConnected()方法来检查连接是否活跃。原因是我看到有时不触发保持中断。也发生在你身上吗?在这一点上,我只能使用TCPIISCONTIDED()方法吗?谢谢你的支持。
举报

云达贞

2019-10-30 08:54:05
等待DHCP恢复1-2分钟似乎太长了。你用什么和声版?我建议您暂时禁用DHCP,以便于测试。使用对网络有效的静态IP地址。请确保您可以ping该板。然后建立客户端-服务器连接,交换少量消息以确保它们被连接,然后执行测试:断开电缆,等待几秒钟并重新连接。然后,从客户机发送另一条消息到服务器-它应该通过。使用WiRESHARK进行监听。检测到电缆已被删除。由于禁用KePixInter,套接字不应报告断开连接。您可以使用TCPIPPUTCPUISCONTIOND()来检查这一点,即使电缆被移除,它也应该返回true。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分