LabVIEW的TCP/IP函數庫非常好用,但是不恰當地設置打開連接結點的參數將帶來一些問題,麻煩。如下圖的打開連接的參數設置: 上圖中指定了本地的埠,會發生這樣的情況。當我們關閉應用程式之後,連接被關閉,按照TCP/IP的協議,連接會話資源會處於一種time_wait的狀態,存活一段時間,一般都 ...
LabVIEW的TCP/IP函數庫非常好用,但是不恰當地設置打開連接結點的參數將帶來一些問題,麻煩。如下圖的打開連接的參數設置:
上圖中指定了本地的埠,會發生這樣的情況。當我們關閉應用程式之後,連接被關閉,按照TCP/IP的協議,連接會話資源會處於一種time_wait的狀態,存活一段時間,一般都需要至少30秒以上才能被系統清理。有的系統中甚至需要1分鐘左右。這給程式調試帶來不便。
翻閱了網路上的許多地方都找不到問題到底出現在哪。看了許多功能相似的示例代碼,都沒有出現像我這樣的問題。放了一段時間,某天突然開竅,想到肯定是指定了某個唯一的參數,使得重新打開和上一次連接一樣的會話導致錯誤。也就是那麼幾秒鐘時間,把指定的本地埠號這個參數刪除——搞定了。
小小總結一下就是假如建立與伺服器的連接時,如果不指定埠號,系統會隨機分配一個或者函數的底層會隨機領一個(我猜)。但指定之後,一旦上一次的會話進入time_wait狀態時,當然不能夠立即再次利用一樣的會話資源。這應該是很不安全的,不是嗎?
問題居然是藏在這個特別不起眼的”坑“里有木有?
希望遇到和我一樣問題的童鞋能夠有所幫助。