CPANにあるIO::Socketを使うとソケット通信ができる。
usestrict;
usewarnings;
useIO::Socket;my$sock=IO::Socket::INET->new(PeerAddr=>’192.168.0.180′,
PeerPort=>’50001′,
Proto=>’tcp’);
$sock->send(“zanmaizanmai”);
これだけで、192.168.0.180の50001番ポートにTCP接続で、「zanmaizanmai」というデータが送られる。
前に作ったLivedoor天気情報から東京の天気を取得するに組み合わせるとこうなった。
send-weather.pl
usestrict;
usewarnings;
useEncode;
useLWP::Simple;
useXML::RSS;
useIO::Socket;my$addr=shift;
my$port=shift;my$url=”http://weather.livedoor.com/forecast/rss/3.xml”;
my$document=get($url)
||die”can’tgetcontentfrom$url¥n”;my$rss=XML::RSS->new;
$rss->parse($document);my$sock=IO::Socket::INET->new(PeerAddr=>$addr,
PeerPort=>$port,
Proto=>’tcp’);for(@{$rss->{items}}){
my$title=encode(‘utf8’,$_->{title});
if($title=~”東京”){
if($title=~”雨”){
$sock->send(“rainy”);
}
elsif($title=~”曇”){
$sock->send(“cloudy”);
}
else{
$sock->send(“shiny”);
}
}
}
こいつを使って
perl send-weather.pl 192.168.0.180 50001
すると、192.168.0.180の50001番ポートに、現在の天気が”shiny” “cloudy” “rainy”のどれかで通知される。
さらにs.h.log: XPortをEthernet-UARTコンバータとして使うと組み合わせると、マイコンにUARTで現在の天気をpushしてやれる。