IO::Socketでハマった
年末ですねぇ。1年なんて本当にあっというまです。さて、昨日からPerlでTCPサーバーとクライアントを作って遊んでいたんですが、かなりハマった部分があったのでメモ。ハマったのはクライアント側のほうで、IO::Socketを使ってTCPサーバーに接続しているのに、メッセージが送信されないという状況。コードは以下のようなシンプルなものです。
#! /usr/bin/perl
use strict;
use warnings;
use utf8;
use IO::Socket;
# 接続
my $socket = IO::Socket::INET->new(
PeerAddr => "localhost",
PeerPort => "12345",
Proto => "tcp",
);
# メッセージ送信
$socket->send("hoge hoge");
# 切断
close($socket);
サーバー側は正常に起動しているし、Telnetから接続した場合は問題なくメッセージが送られるので、問題はクライアント側であることを確認。ここで、そういえばTelnetで送信する時は最後に改行するよなぁと思ったので、以下のようにメッセージの最後に改行を入れたらビンゴでした。
# メッセージ送信
$socket->send("hoge hoge\n");
そんなわけで、メッセージを送信する時は改行を忘れないようにしましょう。単純なミスなのに解決するまで1時間ぐらいかかったのが悔しいところ。