2013-05-02 63 views
0

我的應用程序與pinpad設備進行通信。 pinpad充當服務器等待客戶端連接。我發射我的應用程序,它連接到pinpad我發送命令我得到一個迴應,事情是好的。服務器斷開並重新連接後,客戶端端口/套接字會發生什麼變化?

現在我拔掉以太網電纜從密碼鍵盤,我發送一個命令和超時後,我的應用程序吐出一條錯誤信息:「設備無法達到/發現」。

那麼好吧,我將電纜回密碼鍵盤,現在每次我試圖發送一個命令到密碼鍵盤,我得到了相同的「設備無法到達/發現」的消息。所以我必須重新啓動我的應用程序,而且事情很好。

這是否意味着雙方使用的原始插座在拔掉電纜或我的應用程序正在講話的端口在拔下電纜後無用後會丟失?現在我需要一個新的端口?

這兩個應用程序正在通過TCP/IP進行通信。

回答

1

你沒有說你正在使用哪種傳輸協議。

如果您使用的是TCP(流套接字),那就要看。如果在連接中斷的時間段內(連接處於空閒狀態)沒有數據傳輸,並且TCP保持活動未配置,則不起作用:連接恢復後傳輸的數據將通過,就好像始終存在連接一樣。如果,另一方面,數據同時連接被打破傳輸,則下列情況之一會發生:

  • 如果連接中斷是短暫的,那麼數據最終將被重發的連接恢復後連接將恢復到正常狀態。
  • 如果連接中斷時間過長,則一端或兩端的TCP堆棧將最終聲明發生了超時。發生這種情況時您將收到ETIMEDOUT錯誤,或者連接恢復後出現ECONNRESET錯誤。無論哪種情況,在此事件之後套接字都不會再工作。如果你仍然想要通信,客戶端將不得不與服務器建立新的連接。

如果使用UDP(數據報套接字),那麼你可以,如果你發送,而連接被中斷出現錯誤和超時,但一旦恢復連接一切都將正常工作了。沒有「記憶」。

+0

我使用TCP,你打開一個新的連接後,它是正確的。 – infinitloop 2013-05-02 17:04:34

相關問題