2014-07-22 85 views
2

我想實現一個演示應用程序來通過TCP/IP監聽數據。 enter image description here 數據發送器會一直髮送一串或ASCII字符或一串字符串。它將數據輸入TCP/IP地址(例如,127.0.0.1:22)這可能是一個GPS發射器。Delphi中的TCP監聽器

我想通過單擊開始按鈕並通過TCP/IP監聽數據來實現接收數據的演示應用程序並相應地顯示它。

糾正我,如果我錯了,我不認爲我可以使用服務器/客戶端服務器用於此目的。我試圖用TIdTcpClient創建客戶端應用程序,它只接收一次數據。我不認爲Indy有TCP偵聽組件。

在此先感謝

+2

它是您正在尋找的'TIdTCPServer'。這是一個客戶端/服務器設計。這些數據發送器是將數據發送到服務器的客戶端。 – TLama

+0

嗨TLama,感謝您的評論。這就是我迷惑的地方。如果我使用'TIdTCPServer',我會得到異常'無法綁定套接字。地址和端口已被使用「。我認爲數據發送器(從我的方案)正在使用該端口。這就是爲什麼我認爲,這不是客戶端/服務器設計。 – sMah

+0

我錯過了那個端口號。那麼,22是SSH協議的默認端口。據我所知,Indy沒有SSH協議實現。 – TLama

回答

2

如果某些設備和一些其他程序之間使用TIdTCPServer您的計算機上,你想監控網絡暉,交通運輸將無法正常工作。爲什麼?一旦Indy將讀取網絡數據,它會將其標記爲已處理,並將其從網絡緩衝區中刪除。所以這些數據可能甚至不會到達您計算機上的其他程序。解決這個問題的方法是,您設計的應用程序實際上與網橋相似。您的應用程序監聽一個端口上的數據,然後將該數據轉發到其他程序正在偵聽的另一個端口上。但主要問題是你必須使這兩種方式工作。

你需要的是某種能夠窺視網絡數據但不與其交互的組件。這通常在駕駛員級別完成。

現在,如果在您自己的軟件中沒有必要具備這些功能,但您只想獲取我推薦的數據,請嘗試Wireshark(http://www.wireshark.org/)。 Wireshark是一款功能強大的freware軟件,它允許您在基本上所有協議上監控所有網絡流量,而不會造成任何干擾。爲了使這個軟件能夠工作,它安裝了一個特殊的驅動程序來攔截網絡數據。

也許你會想在你的應用程序中使用相同的驅動程序,如果這個功能需要在你的應用程序中。

+0

我完全錯過了聽力部分(圖中的雲)和思想OP想要使用這些數據包。我應該先告訴它:-) – TLama

+0

另一種解決方案(而不是下降到驅動程序級別)將是一個不同的協議 - 例如UDP,當消息被接收器讀取時「消耗」 – mjn

+0

由於OP是試圖聽從來自外部設備的消息我懷疑他有能力影響哪個協議用於dta傳輸。 – SilverWarior

1

根據您的圖表,我認爲您的實現也可以基於消息中間件,使用接收GPS發送器或其他數據的消息代理。

消息代理會在內部存儲數據並將其轉發給所有感興趣的客戶端。在這種情況下,典型的消息傳遞模式是「主題」,其廣播類似於無線電臺的消息。

因此,中間件將確保信息將被收集(可選地還保存到磁盤),然後保證交付給接收者。即使離線一段時間的接收機仍能收到在不聽音的地方產生的GPS信息('追溯消費者'),也可以這樣做。

有許多流行的免費開源消息代理,其中大多數也可以與Delphi一起使用。