2017-07-26 70 views
0

我和我的Mbed控制器战斗,它的获奖:/ 部分我下面的代码:mbed套接字连接需要很长的时间

eth.connect(); 
pc.printf("ethernet OK"); 
sock.set_blocking(false,200); 
pc.printf(" socket setting OK "); 
sock.connect("192.168.1.100", 80); 
pc.printf("GO! GO! GO!"); 
conn = sock.is_connected(); 

当服务器上,我可以带插座连接,并有没问题。但是当我关闭服务器时,我的程序在sock.connect(...)行中等待很长时间,然后向前移动。我希望它向前移动,但我不想等很长时间:/

我发现我应该将套接字设置从阻塞更改为非阻塞,并且从默认值= 1500更改为更少。我到处都改变了它,我可以:
- 我socket.h中库的一部分:
void set_blocking(bool blocking, unsigned int timeout=200);
- 我socket.cpp库的一部分:
Socket::Socket() : _sock_fd(-1), _blocking(false), _timeout(200)
,仍然一无所获。它等待约17-18秒,但我想将其更改为最大。 1-2sec。

我会很高兴,如果你给我的任何提示:)

回答

0

首先我需要说的是,TCP_SYNMAXRTX改变是什么东西,什么可以帮助,它帮助了我,但根本没有。在我的情况下,重要的是要将mbed操作系统更改为最新版本。在之前有套接字设置的库,但实际上它们正常工作,因为mbed OS包含EthernetInterface和其他库(不应将其作为外部库导入)。

谢谢你的时间和善意! :)

0

假设你正在使用mbed OS,插座设成阻塞,并设置为任何你认为合适的超时时间。不需要修改。该方法的语法可以看到here

但是,我无法重现您的问题。你可以使用调试器并确认应用程序是否挂在这条线上 - https://github.com/ARMmbed/mbed-os/blob/533e6f0febb5ea582a61f0c8aaf686c70333524f/features/netsocket/TCPSocket.cpp#L57

+0

你好萨拉:)我使用不同的库 - 我刚刚导入EthernetInteface,并在那里我发现了套接字和其他文件,但版权是从2012年和源代码看起来不同。它是我应该下载的任何其他图书馆吗?也许这是某种“不智能”的问题,但我在mbed编程方面很新颖:) 你在问关于TCPSocket.cpp,但在EthernetInterface中该文件甚至不存在,所以我想它应该是别的东西。你能说我应该找什么吗?我上传了最新的EthernetInterface,但它仍然是一样的。 –

+0

编辑之后:我使用Socket:https://developer.mbed.org/handbook/Socket,它实际上非常类比。我尝试将其设置为blocking = true,timeout = 200和其他许多组合,但仍然没有任何结果:/ –

+0

切换到mbed OS 5. EthernetInterface包含在那里。您提到的EthernetInterface库不再受支持。从克隆https://github.com/ARMmbed/mbed-os-example-blinky开始,然后添加相同的代码。这种方式你应该有最新的和最好的版本,它可能会工作。 –

0

棉花糖的建议应该没问题。

理论上你也可以尝试将TCP_SYNMAXRTX宏设置为更低的值。它可能会有其他一些不可预见的后果(我不确定,因为我对LwIP了解不多)。

+0

你好1月;) 我已经改变这makro如你所说 - 我喜欢风险,我把它设置为“1”。我看到,当我将卡靠近RFID阅读器时,它将数据快速推送(它停止3秒,而不是18秒 - 对我来说没有问题),但是当我放入下一张卡时,它的表现与以前相同 - 等待18秒。因此,重新启动后,第一个数据变好,但接下来像以前一样阻塞。有没有任何buffor要清除? –