2011-12-08 11 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); 

を、私はそれはあなたのすべてだと思います必要。あなたはソケットを作成する方法がわからない場合は - またははより喫緊の課題であることをthis-- を開始するためのプロトコルを持っていない、私が思うだろう。前者についてはIO::Socket::INETを参照してください。

+0

ありがとうございました!それは私が探していたものです、私はfdなしでnstoreを使用しようとしていました... – Nick

-3

[データ::ダンプとはevalを組み合わせることができます。アイデアは(評価)、データ構造(ハッシュ)をシリアライズ送信および復号化するためである。

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

# transmit && receive 

$a_clone = eval($serializable_a_received) ; 
+7

「...いくつかの種類にデータを書き込むことができ」の代わりに「私は私がデータをシリアライズ_should_ことを知っている」と言うだろうが、プロジェクト)あなたは間違いなくそれをすべきです。この方法で誰でもあなたのサーバーに任意のPerlコードを注入し、あなたのセッションでそれを実行するかもしれません... –

+2

-1、 'eval STRING'は決してネットワーク上で送信されるデータの有効なオプションではありません。 –

5

選択肢が既に解決策を掲載すると、あなたも、YAMLまたはJSONを使用することができます。

関連する問題