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

감사합니다! 그게 내가 찾고 있던거야, 나는 fd없이 nstore를 사용하려고했다. – Nick

-3

데이터 :: 덤프와 평가를 결합 할 수 있습니다. 아이디어는 (평가), 데이터 구조 (해시)를 직렬화 전송하고 디코딩하는 것입니다

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

# transmit && receive 

$a_clone = eval($serializable_a_received) ; 
+7

보안이 조금만 중요하거나 가능성이 높을 수 있습니다. 프로젝트) 당신은 절대 그렇게해서는 안됩니다. 이렇게하면 누구나 임의의 Perl 코드를 서버에 주입하여 세션에서 실행할 수 있습니다 ... –

+2

-1, 'eval STRING'은 (는) 네트워크를 통해 전송되는 데이터에 대해 유효한 옵션이 아닙니다. –

5

이미 게시 된 솔루션의 대안으로 YAML 또는 JSON도 사용할 수 있습니다.

관련 문제