プロが教えるわが家の防犯対策術!

下記コードを使い WEBサイトの更新日付を取得したいのですが
実行すると Socket Error:Invalid argument のエラーが表示されソケットの作成に失敗します。
Perlのバージョンは 5.8.0でウィルス対策ソフト停止後のコード実行等対策等を考えて行いましたが状況は改善されません。
よければ、どうしてソケットの作成に失敗するのか教えていただけないでしょうか?

失敗テストケース
$host:www.google.co.jp

# テストコード
# モジュールの使用宣言
use IO::Socket;

# URLを入力
$ur1 = <STDIN>;

# URLをホスト名とファイルパスに分割
chomp($ur1);
if ($ur1 =~ /http:\/\/([^\/]+)(\/.*)/) {
$host = $1;
$file = $2;
} else {
die "そのURLには対応していません。\n";
}

# ソケットオブジェクト作成
$client_socket = new IO::Socket::INET {
PeerAddr => $host,
PeerPort => 'http',
Proto => 'tcp',
TimeOut => '5' };
unless ($client_socket) {
print "Socket Error:$!\n";
}

# 入力をサーバーに送信
print "$host $file" . "\n";
print $client_socket "GET $file HTTP/1.0\n\n";

A 回答 (2件)

そのnewの書き方はどこで学んだものですか?


パッケージを作るときのコンストラクタとか書いてはいませんでしたか?

$client_socket = IO::Socket::INET->new (
PeerAddr => $host,
PeerPort => 'http',
Proto => 'tcp',
TimeOut => '5' );
unless ($client_socket) {
die "Socket Error:$!\n";
}

# 入力をサーバーに送信
print "$host $file" . "\n";
print $client_socket "GET $file HTTP/1.0\n\n";

# 入力をフラッシュする
$client_socket->flush();

# 受信データを垂れ流す
print while (<$client_socket>)

ついでにソケットの勉強ならともかく更新時刻取るだけならLWP使った方楽です
    • good
    • 0
この回答へのお礼

すいません。new の()小括弧を間違えていたのが原因でした。文法ミスを気をつけたいと思います。
またLWPも勉強してみます。

修正前
$client_socket = new IO::Socket::INET {
PeerAddr => $host,
PeerPort => 'http',
Proto => 'tcp',
TimeOut => '5' };
unless ($client_socket) {
print "Socket Error:$!\n";
}

修正後
$client_socket = new IO::Socket::INET (
PeerAddr => $host,
PeerPort => 'http',
Proto => 'tcp',
TimeOut => '5' );
unless ($client_socket) {
print "Socket Error:$!\n";
}

お礼日時:2009/01/03 21:44

補足


書き方ってのはnewの位置じゃなくて中括弧(波括弧)の事ね
    • good
    • 0
この回答へのお礼

すいません。new の()小括弧を間違えていたのが原因でした。文法ミスを気をつけたいと思います。
またLWPも勉強してみます。

修正前
$client_socket = new IO::Socket::INET {
PeerAddr => $host,
PeerPort => 'http',
Proto => 'tcp',
TimeOut => '5' };
unless ($client_socket) {
print "Socket Error:$!\n";
}

修正後
$client_socket = new IO::Socket::INET (
PeerAddr => $host,
PeerPort => 'http',
Proto => 'tcp',
TimeOut => '5' );
unless ($client_socket) {
print "Socket Error:$!\n";
}

お礼日時:2009/01/03 21:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!