2011-10-20 111 views
1

這是Sending and receiving data streams in Delphi的延續。使用INDY發送和接收Delphi數據流10

我打算髮送一個使用TCP/IP的圖像,然後使用UDP通過將圖片分成小塊並僅發送有重大變化的片段來更新該圖像中的更改,然後客戶端將修補舊圖片上的那些作品。

每15秒使用TCP/IP更新整個圖像。

服務器中的圖片將由網絡攝像頭更新。 (就像視頻流一樣)。我已經在delphi中創建了一個運動檢測器和一個收集器,這些工作正常。

以下是我在實施

1.Sending和接收使用TIDUDPServer /客戶端在INDY 10(在示例代碼>印地10)的數據流,我使用的Delphi XE2
2.什麼問題是數據的最大尺寸在UDP一個分組可以支持
3.當我在事件IdUDPServer1.onUDPRead雙擊產生誤差的IDE與

TArray <System.Byte> 

我認爲最後的錯誤是因爲XE2中新引入的命名空間。

怎麼樣使用以下,而不是印

Sockets.TTcpClient 
Sockets.TTcpServer 
Sockets.TUdpSocket 
+0

a)你不應該使用UDP。 b)研究關於網絡的細節[有](http://stackoverflow.com/questions/1098897/what-is-the-largest-safe-udp-packet-size-on-the-internet) –

+0

我認爲小件(檢測到移動的區域)將小於500字節左右,我不在乎是否有一些片段沒有更新。 – VibeeshanRC

回答

1
  1. Indy的UDP組件不支持流可言,只有TIdBytesString(這是內部使用TIdBytes處理)。如果要發送/接收TStream數據,則必須將數據複製到中間TIdBytes或從中間TIdBytes複製數據。

  2. UDP理論上限於〜64kb,但由於操作系統限制,UDP實際上要小得多。一般情況下,每個數據包的發送時間不應超過8-16kb。

  3. 這是一個已知的Delphi編譯器錯誤,在過去的幾個版本中還沒有被修復。 IDE正在生成基於RTTI的編譯器未正確使用的代碼。這不是Indy的bug,但Embarcadero意識到這個問題。在他們(最終)修復編譯器錯誤之前,您可以通過在運行時而不是在設計時在代碼中分配OnUDPRead事件處理程序來避開它。