如何通过网络套接字发送perl散列?
我正在研究一个由服务器和多个客户端组成的工具。 客户端创建一个需要通过网络套接字发送到服务器的散列。如何通过网络套接字发送perl散列?
我以为nstore将是正确的做法,但我找不到方法来检索服务器上的数据。
谁能告诉我如何正确地做到这一点?
问候尼克
PS:我知道我可以在某种字符串格式的写入数据,并重建它在服务器上,但如果能够避免我想知道。
发送:
Storable::nstore_fd(\%hash, $socket);
检索:
my $ref = Storable::fd_retrieve($socket);
我认为这是你需要。如果你不知道如何创建套接字 - 或者没有一个协议来启动这个 - ,那么是一个更紧迫的问题,我想。前者参见IO::Socket::INET
。
谢谢!这就是我正在寻找的,我试图使用nstore没有fd ... – Nick
你可以结合Data :: Dump和eval。这个想法是序列化的数据结构(散),传输和解码(评估):
$a = { ... }
$serializable_a = Data::Dump::dump($a)
# transmit && receive
$a_clone = eval($serializable_a_received) ;
这可能会解决,但如果安全性只有一点重要性或可能成为(对于最项目)你绝对不应该这样做。通过这种方式,任何人都可以将任意Perl代码注入到服务器中并在会话中运行它... –
-1,'eval STRING'永远不是通过网络发送数据的有效选项。 –
难道你只是调用'Storable :: retrieve'或'Storable :: fd_retrieve'? – mkb
我会说“我知道我应该序列化数据”而不是“可以以某种方式写入数据......” – dave