- 締切済み
Perl / IO::Socketによる送受信について
IO::Socketを利用してクライアントを作成しようとしているのですが、サーバーが返すパケットの末尾が 0A(\n) ではなく 00(←?) であるため、クライアント側で while ($receive = <$client_socket>) { print $receive; } を使用し正常に受信・表示する事が出来ないようです。末尾が 00 で終わっているデータを受信・表示するにはどうしたら良いのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
回答No.2
バッファリングの問題だったりして? 関係なかったらすみません
- zebedeer
- ベストアンサー率66% (80/121)
回答No.1
{ local ($/) = "\0" while ($receive = <$client_socket>) { print $receive; } } こんな感じかな? (やったことないので適当だけど)
質問者
お礼
その後、sysreadを利用してバッファに読み込み、 その内容をsplitで切る事で表示させることができました。 ありがとうございました!
質問者
補足
お早い回答ありがとうございます。 早速試してみたところ、 { local($/) = "\0"; $receive = <$client_socket>; print $receive; } この様にすれば1番目の受信パケットは認識・表示する事ができました。 しかし、2番目以降も表示させるためwhileでループを作った場合は認識できなくなってしまいました…。 ループさせない場合は認識出来たので、もう少し頑張ってみようと思います。
補足
パケットを見てみると、 local→DEST 送信(データ要求) ACK DEST→local size0 ACK DEST→local size60 ACK (←ループさせなければこれは表示出来ました。) local→DEST size0 ACK DEST→local size100 ACK local→DEST size0 ACK .... の様になっているのですが・・・ 勉強不足です(泣