68user's page 掲示板

Prev< No. 731> Next  [最新発言に戻る] [過去ログ一覧]
No. 731 # つる 2000/02/16 (水) 10:32
ソースはこんな感じです。

#!/usr/local/bin/perl -w

use Socket;

$server_port = 4989;

# ソケット生成
socket(CLIENT_WAITING,PF_INET,SOCK_STREAM,0)
                || die "ソケットを生成できません。$!";

# ソケットオプション設定
setsockopt(CLIENT_WAITING,SOL_SOCKET,SO_REUSEADDR,1)
                || die "setsockopt に失敗しました。$!";

# ソケットにアドレス(=名前)を割り付ける
bind(CLIENT_WAITING,sockaddr_in($server_port,INADDR_ANY))
                || die "bind に失敗しました。$!";

# ポートを見張る
listen(CLIENT_WAITING,SOMAXCONN)
                || die "listen: $!";

print "ポート $server_port を見張ります。\n";

# while(1)することで、1つの接続が終っても次の接続に備える
while (1){
                accept(CLIENT,CLIENT_WAITING);

                # HTTP プロトコルを使う
                $port = getservbyname('http','tcp');

                # ホスト名を、IP アドレスの構造体に変換
                $iaddr = inet_aton("xxx.xxx.xxx.xxx")
                                || die "[xxx.xxx.xxx.xxx]は存在しないホストです。\n";

                # ポート番号と IP アドレスを構造体に変換
                $sock_addr = sockaddr_in($port,$iaddr);

                # ソケット生成
                socket(SERVER,PF_INET,SOCK_STREAM,0)
                                || die "ソケットを生成できません。\n";

                # 指定のホストの指定のポートに接続
                connect(SERVER,$sock_addr)
                                || die "[xxx.xxx.xxx.xxx]のポート$portに接続できません。\n";

                # ファイルハンドル SERVER をバッファリングしない
                select(SERVER); $|=1; select(STDOUT);
                # クライアントに対してバッファリングしない
                select(CLIENT); $|=1; select(STDOUT);

                # WWWサーバにHTTPリクエストを送る
                while (<CLIENT>){
                                print SERVER "$_";
                                print "$_";
                }

                # ヘッダ部分を受け取る
                while (<SERVER>){
                                # 改行のみの行ならループを抜ける
                                m/^\r\n$/ && last;
                }

                # ボディ部分を受け取り、表示
                while (<SERVER>){
                                print CLIENT "$_";
                                print "$_";
                }
                close(CLIENT);
}

とりあえず、サンプルをそのまま利用させていただいております。
おかしいところがあればご指摘下さい。
perl初心者のものですみません。

Prev< No. 731> Next  [最新発言に戻る] [過去ログ一覧]