我不確定這是否是正確的地方要問,所以請原諒我,如果不是。TCP作爲連接協議問題
我正在寫計算機監控軟件,需要連接到服務器。服務器可能會發出相對緊急的消息,如聲音或取消警報,客戶端可能會發送有關計算機的數據,如屏幕截圖。客戶發送的數據在時間上並不太重要,但遲遲不會超過兩分鐘。
對於軟件來說,不需要設置端口轉發是非常重要的,並且假設互聯網連接將通過幾乎所有時間都具有NAT的無線路由器完成。
我的想法是從客戶端啓動TCP連接,並使用它來傳輸數據。理想情況下,我不會在沒有需要時發送數據,但我相信這是不可能的。現在每隔一段時間發送一次ping就會保持連接活躍,如果此程序一直在計算機上運行,它將使用何種帶寬?另外,是否有可能減少這些保活標題的大小?
在我開始設計通信和編程之前,這個連接計劃是否有缺陷?有更好的選擇嗎?
謝謝!
除非您通過在套接字上啓用保持連接來告知TCP堆棧,否則TCP堆棧不會自動發送ping。它默認是禁用的。 – EJP
不要擔心,所有的透明和道德(將在GPL下發布)。如果我正確理解了第一部分,我可以打開一個連接,離開它幾個小時,然後應該做些緊急的事情 - 比如警報 - 它可以立即訪問? – Jacob
由於EJP指出您需要啓用啓用保持活動;是的,您可以連接並保持頻道打開,並在需要時發送數據,但是,如果在發送連接之前該發生什麼情況,該怎麼辦?最好的情況是消息會通過網絡上的可用延遲傳遞到另一端 - 最糟糕的情況是,延遲時間延長,延遲時間延長,超時,需要重新連接,或者另一端下降,你將不得不做出幾次嘗試,我會傾向於採取平均情況,但最好記住最壞的情況。 – wmercer