完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我正在与XC 1.34在PIC32 MZ2048 ECG100上运行和声1.04。我目前使用TCPIP_TCP_WasReset来检查连接的有效性,但我注意到,如果实际网络电缆被删除而不是关闭连接应用程序,WasReset永远不会设置为真。关闭连接应用程序将将其设置为真。我使用的较老的堆栈在和谐之外检测到了这种情况,发生了什么?是否有另一种方法来检测这一点。在这种情况下,我的套接字似乎永远保持打开状态,使我无法使用套接字。
|
|
相关推荐
19个回答
|
|
|
我在Oracle 1.03Y001中遇到了同样的问题,在这种情况下,网页上有一个运行Ajax的Web服务器。我有6个http套接字,超过2-3天它们就锁定了,我想可能是因为我在ajax事务中关闭了我的浏览器,但是我也可以通过反复断开电缆来触发它。我的“修复”是向TCP .C添加一个函数来返回套接字TCP状态。然后,我从http任务中调用并检查它,如果套接字卡住了超过40秒,发出一个TCPIP_TCP_Abort并清理http套接字。到目前为止,Web服务器上没有更多的锁定。不幸的是,我没有时间检查1.06.02以查看它是否被修复。
|
|
|
|
|
|
我通过在套接字上设置KePiVal活性选项来解决这个问题。
|
|
|
|
|
|
我记得,TCP应该是这样工作的,因为它允许连接从间歇连接问题中恢复。也就是说,如果您拔出电缆并重新插入它,那么TCP堆栈应该恢复并继续传输数据。您可以使用TCP.-alive或最好是应用程序级别的周期性心跳来确保对等点仍然存在。如果希望在拔掉电缆时关闭连接,那么应该能够使用TCPIP_STACK_NetIsLin.(TCPIP_NET_HANDLE h)来检查是否存在该连接。我们过去在旧的MLA堆栈中使用TCP.-alives,但是有一些奇怪的问题,其中LabVIEW/Windows即使在发送.-alives时关闭连接之后仍然保持连接打开,所以我们改为应用程序级的心跳,并且这种奇怪没有返回。可能还有别的事情发生,但是我们找不到。
|
|
|
|
|
|
我发现堆栈进入一个插座没有恢复的位置,它永远保持锁定(直到一个板重置)。那不可能是正确的行为。
|
|
|
|
|
|
TCP套接字可以永远保持打开,这与链路状态无关。只有当套接字用户或另一方试图关闭它,而不是当链路出现故障时,套接字才会关闭。这是正常/必需的行为。使用TCPIP_STACK_NetIsLin.()来检测电缆是否被拔出ged或要通知的动态注册处理程序之一。或启用KEEP_ALIVE选项以强制套接字与另一方通信。但是,不应该发生这种情况。请提供更多详细信息,以便我们进行调查。
|
|
|
|
|
|
在我的服务器应用程序中,我遇到了关于和谐1.0701的问题。如果远程客户端的连接丢失,WasReset永远不会设置为true,并且NET_PRES_SocketIsConnected函数总是返回true。参数是:Keep Alive TimeOut=10000ms,Max unacked keep.=6。
|
|
|
|
|
|
如何使用UpETCPIPTCPPopOPTSESET(…)?我写了以下代码,void*tcpForceFlush=(void*)1;TCPIP_TCP_OptionsSet(MySocket,TCP_OP._KEEP_ALIVE,tcpForceFlush);但是在函数内部运行时,它发生了异常错误。
|
|
|
|
|
|
对于TCP_OP._KEEP_ALIVE,参数需要是指向TCP_OP._KEEP_ALIVE_DATA结构的指针,而不是值“1”。堆栈试图将那个“1”引用为TCP_OP._KEEP_ALIVE_DATA的地址,并且在那里有一个异常。
|
|
|
|
|
|
我的第三个参数出了什么问题吗?我无法克服它。我从HTTP.C中发现了一个很难使用的例子,并试图模仿它。奇怪的是它从来没有例外。(下面的代码)请给我代码示例如何使用这个函数。我需要它,因为我希望固件必须在10秒内自动检测突然从互联网断开的未预期的断开链接。void*tcpForceFlush=(void*)1;TCPIP_TCP_OptionsSet(pHttpCon->socket,TCP_OP._NODELAY,tcpForceFlush);
|
|
|
|
|
|
我想我已经知道如何使用这个函数了。我声明TCP_OP._KEEP_ALIVE_DATA keepAlive;-->参见图片附件。但是它似乎总能在大约2分钟之后检测到断开的链接。需要使它更快到10秒。该怎么做?
|
|
|
|
|
|
keepAliveTmo的0没有帮助——使用一个有效值,比如1-2秒。如果需要更快,则需要检查链接状态。
|
|
|
|
|
|
如果是0,那么它将采用默认值---gt;TCPIPPTCPKEPEGYAVEVETIMOUT==10000(ms),但总是2分钟…
|
|
|
|
|
|
我改为,keepAlive.keepAliveEnable=1;keepAlive.keepAliveTmo=10;如何在超时设置10s准确时间?
|
|
|
|
|
|
那么,如果将超时设置为10秒,计时不正确或发生了什么?
|
|
|
|
|
|
当10时,实际的触发器是~1s,但是即使我把它提高到100,触发器仍然在2分钟。遗憾的是:keepAlive.keepAliveEnable=1;keepAlive.keepAliveTmo=100;//在mskeepAlive.keepAliveUnackLim=1;
|
|
|
|
|
|
我假设“触发器”是网络上TCP数据包的速率?你有一个WiReSARK日志,或者你是如何精确测量保持生命频率的?
|
|
|
|
|
|
我的意思是,TCPIP_TCP_WasReset函数应该在链接中断一定时间之后就变为真。当它变为真时,我就可以开始为我喜欢的事件做一些事情:keepAlive.keepAliveTmo=100;//在mskeepAlive.keepAliveUnackLim=5;我现在修改为上面的代码,func2分钟后TCPIpl TCPpA才变为真,超时链接下降。这个超时时间可以预先确定吗?因为在MLA中它运行顺利,没有问题!
|
|
|
|
|
|
我刚刚用一个TCP客户端套接字做了一个测试来验证你所声称的。对我来说,它工作得很好。我把保持活动间隔设置为1秒,限制设置为5、10等。我总是收到超时过期后套接字关闭的报告。您使用什么版本的和谐?
|
|
|
|
|
|
我弄不明白。你有1个吗?结构TCPPopOpj.KePyAvivEx数据在单元MS中有成员KePayValeMo。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
454 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3529 浏览 3 评论
1121浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
466浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 17:53 , Processed in 1.331488 second(s), Total 108, Slave 91 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1248