SummerWind

Web, Photography, Space Development

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時間ぐらいかかったのが悔しいところ。

Moto Ishizawa

Moto Ishizawa
ソフトウェアエンジニア。ロケットの打上げを見学するために、たびたびフロリダや種子島にでかけるなど、宇宙開発分野のファンでもある。