2017-07-26 160 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要清除? –

相關問題