• 締切済み

Perl / IO::Socketによる送受信について

IO::Socketを利用してクライアントを作成しようとしているのですが、サーバーが返すパケットの末尾が 0A(\n) ではなく 00(←?) であるため、クライアント側で while ($receive = <$client_socket>) { print $receive; } を使用し正常に受信・表示する事が出来ないようです。末尾が 00 で終わっているデータを受信・表示するにはどうしたら良いのでしょうか?

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

バッファリングの問題だったりして? 関係なかったらすみません

xYukikox
質問者

補足

パケットを見てみると、 local→DEST 送信(データ要求) ACK DEST→local size0 ACK DEST→local size60 ACK (←ループさせなければこれは表示出来ました。) local→DEST size0 ACK DEST→local size100 ACK local→DEST size0 ACK .... の様になっているのですが・・・ 勉強不足です(泣

  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.1

{ local ($/) = "\0" while ($receive = <$client_socket>) { print $receive; } } こんな感じかな? (やったことないので適当だけど)

xYukikox
質問者

お礼

その後、sysreadを利用してバッファに読み込み、 その内容をsplitで切る事で表示させることができました。 ありがとうございました!

xYukikox
質問者

補足

お早い回答ありがとうございます。 早速試してみたところ、 { local($/) = "\0"; $receive = <$client_socket>; print $receive; } この様にすれば1番目の受信パケットは認識・表示する事ができました。 しかし、2番目以降も表示させるためwhileでループを作った場合は認識できなくなってしまいました…。 ループさせない場合は認識出来たので、もう少し頑張ってみようと思います。

関連するQ&A