2017-02-20 62 views
0

我正在致力於一個涉及GSM/GPRS模塊的項目,其作用是通過互聯網使用TCP-IP和Modbus協議將客戶端與某些設備連接。現在我正在研究TCP連接方案。通過GPRS的TCP-IP與Modbus

據我瞭解,如果一段時間內沒有任何流量,GSM網絡會自動關閉TCP連接。

我想檢測和維護TCP連接儘可能可靠。還要檢測半開連接。

連接過程如下:我的GSM模塊充當服務器,所以它在端口502上打開套接字並等待客戶端讀取數據。客戶端可以在3分鐘或更長時間內定期讀取數據。

當客戶端與我的模塊連接時,它會請求一些數據,模塊會發送請求的數據並等待其他請求,並保持連接處於打開狀態。

現在,如果由於其他原因(由於電源故障,GSM網絡等)而導致連接斷開,客戶端需要能夠再次與模塊連接。該模塊必須檢測斷開的連接並且必須採取措施以便客戶端可以再次重新連接到它

爲了檢測斷開的連接,模塊定期向客戶端發送一些虛擬數據並檢查客戶端是否收到該數據。如果沒有,則必須重新建立tcp連接。

問題是:如何解釋這個「重新建立」連接?

  1. 我應該關閉當前的TCP連接,並打開一個新的,這意味着再次監聽端口502?

  2. 我應該關閉當前的TCP連接並嘗試連接到上一個有效的TCP連接提供的客戶端的端口和IP嗎?

問題是,該模塊必須儘快提供以回答客戶的要求;這就是爲什麼我需要儘快使TCP連接正常工作的原因。

PS。該模塊僅支持AT命令(Quectel M95模塊),因此我無法訪問TCP堆棧的所有功能。 謝謝。 (我在TCP堆棧新的,所以我可能使用不當含義技術術語)

回答

1

的問題是:如何解釋這個連接「重建」?

理想情況下,客戶端應該關心與服務器的連接。客戶來去。服務器應該繼續到端口上的listen

我應該關閉當前的TCP連接,並打開一個新的,這意味着再次監聽端口502?

否。服務器應該確定連接已經結束,並關閉單獨連接的套接字。無需再試聽。在開始時完成的listen仍應保持良好。

我應該關閉當前的TCP連接並嘗試連接到上一個有效的TCP連接提供的客戶端的端口和IP嗎?

服務器將最不關心客戶端端口。它無法連接到客戶端。客戶端應該重新連接到服務器。

因此,在客戶端內置智能以查找斷開的連接並重新建立與服務器的連接。