2011-12-08 58 views
1

我正在研究一個由服務器和多個客戶端組成的工具。 客戶端創建一個需要通過網絡套接字發送到服務器的散列​​。如何通過網絡套接字發送perl散列?

我以爲nstore將是正確的做法,但我找不到方法來檢索服務器上的數據。

誰能告訴我如何正確地做到這一點?

問候尼克

PS:我知道我可以在某種字符串格式的寫入數據,並重建它在服務器上,但如果能夠避免我想知道。

+1

難道你只是調用'Storable :: retrieve'或'Storable :: fd_retrieve'? – mkb

+1

我會說「我知道我應該序列化數據」而不是「可以以某種方式寫入數據......」 – dave

回答

6

發送:

Storable::nstore_fd(\%hash, $socket); 

檢索:

my $ref = Storable::fd_retrieve($socket); 

我認爲這是你需要。如果你不知道如何創建套接字 - 或者沒有一個協議來啓動這個 - ,那麼是一個更緊迫的問題,我想。前者參見IO::Socket::INET

+0

謝謝!這就是我正在尋找的,我試圖使用nstore沒有fd ... – Nick

-3

你可以結合Data :: Dump和eval。這個想法是序列化的數據結構(散),傳輸和解碼(評估):

$a = { ... } 
$serializable_a = Data::Dump::dump($a) 

# transmit && receive 

$a_clone = eval($serializable_a_received) ; 
+7

這可能會解決,但如果安全性只有一點重要性或可能成爲(對於最項目)你絕對不應該這樣做。通過這種方式,任何人都可以將任意Perl代碼注入到服務器中並在會話中運行它... –

+2

-1,'eval STRING'永遠不是通過網絡發送數據的有效選項。 –

5

作爲已發佈解決方案的替代方案,您也可以使用YAMLJSON