2013-09-30 26 views
-1

我們有一個以TCP服務器模式運行的設備。所以我必須連接到它開始發送和接收。從充當服務器的模塊獲取數據

我用IdTcpClient連接到它。但我不知道如何使用IdTcpClient (IdTcpClient沒有OnExecute事件)獲取數據。

我得到它的端口(端口是動態的)發送數據(我有一個firewll)。但是我不能用IdTCPServer來監聽,而且我得到這個錯誤:「無法綁定套接字,地址和端口已經在使用中」。

如何獲取傳入數據(使用IdTcpClient)並向其發送命令?我在某個地方有錯嗎?

回答

1

您需要先閱讀「設備」手冊。並找出您的設備希望您讀取數據的操作。 無法打開同一個端口2次。

+0

這是一個TCP連接。我更喜歡閱讀RFC相關主題。 – SAMPro

+1

Internet標準協議在RFC中發佈。僅僅因爲設備使用TCP並不能保證它使用標準的Internet協議進行通信。 –

2

連接到設備後,只要需要,就可以讀取並寫入設備。如果您不想掛起主UI線程,則應該在工作線程中執行套接字I/O。這對於Indy的阻塞I/O模型非常有效。您可以爲此使用TThread,並覆蓋其Execute()方法。或者使用Indy的TIdThreadComponent組件。

+0

我如何閱讀?例如IdTCPServer有一個OnExecute事件,我可以用AContext.Connection.IOHandler.ReadLn讀取數據,但是IdTCPClient沒有這樣的事情(我沒有找到)。 – SAMPro

+0

TIdTCPClient具有IOHandler屬性。 –