2012-02-24 196 views
1

我試圖發送一個標量值,而我已經用nfreeze從可存儲的套接字發送了一個標量值。 循序漸進:通過UDP發送數據包

  1. 我得到的標量 $serializedHash = nfreeze \%hash;
  2. 我想通過插座$sendSocket->send($serializedHash);

發送這工作得很好,只要標不大於1024byte更大。因爲我在另一邊有一個插座,只能接收最大數據。長度爲1024byte。 我也不能將存儲在一個文件中,然後用sysreadsyswrite來處理它。

我不希望發送每個插槽的每一行,因爲我的哈希有超過200萬個條目。散列元素由\n分開,所以我嘗試使用split函數,但後來我有一個有200萬條目的數組。

如何通過UDP套接字發送包中的數據?

+0

爲什麼UDP?這真的不符合這個任務。 (請參閱我的意見raina77ow的答案的細節。) – ikegami 2012-02-24 16:52:03

回答

3

您可能通過大塊處理您的序列化的哈希值,這樣的:

while ($serializedHash =~ /(.{1,1024})/sg) { 
    my $chunk = $1; 
    # sending $chunk 
} 
+0

請解釋它litle位更多=) – Mijat 2012-02-24 15:39:25

+0

據我所知,你需要將你的大字符串拆分成較小的部分,然後通過UDP逐一發送。我所建議的實際上是一個非常普通的解決方案:while($ string =〜/ $ pattern/g)循環。 $模式一次又一次地匹配字符串,每次從它之前完成的位置開始。由於它默認情況下很貪婪,它會捕獲1024個符號 - 或剩下的任何東西。 – raina77ow 2012-02-24 16:37:31

+0

順便說一下,這裏有一個潛在的錯誤:因爲我們應該處理字節,而不是字符,所以也應該引入'use bytes'指令。 – raina77ow 2012-02-24 16:38:54