今日は少し進展あり。ちなみにテスト時はTonIrcdを使っています。Windowsで簡単に動くIRCdってこれしかないんですもの…
まずは本日付のソース。
まずみていただきたいのは
この2行。デフォのハンドルをSOCKETにし、そのハンドルのバッファリングをしないようにしています。これの代わりに
そして最後のループ。SOCKETから1行読み出してそれを表示しています。これで嵌ったんですが、selectでデフォルトのハンドルをSOCKETにしているので、ただprintするだけではSOCKETに書いてしまうんですね。というわけで明示的にSTDOUTを指定。
というわけで、ともかくまぁログインはできるようになりました。
use strict;
use Socket;
print "Script Start!\n";
my $servername='127.0.0.1';
my $struct = sockaddr_in(6667,inet_aton($servername));
socket(SOCKET, PF_INET, SOCK_STREAM, 0)
or die('ソケット作成失敗(´・ω・`)');
connect(SOCKET, $struct)
or die('接続失敗(´・ω・`)');
select SOCKET;
$|=1;
print SOCKET ":testnick USER guest tolmoon tolsun :Ronnie Reagan\r\n";
print SOCKET ":testnick NICK Wiz\r\n";
my $buf;
while($buf=<SOCKET>)
{
print STDOUT "$buf";
}
まずみていただきたいのは
select SOCKET;
$|=1;
この2行。デフォのハンドルをSOCKETにし、そのハンドルのバッファリングをしないようにしています。これの代わりに
autoflush SOCKET(1);
でもいいですが、これを使う場合はFileHandleモジュールが必要になります。そして最後のループ。SOCKETから1行読み出してそれを表示しています。これで嵌ったんですが、selectでデフォルトのハンドルをSOCKETにしているので、ただprintするだけではSOCKETに書いてしまうんですね。というわけで明示的にSTDOUTを指定。
というわけで、ともかくまぁログインはできるようになりました。
コメント