2011-12-08 56 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