[ トップページ ]

« Perl による簡易 XML インタフェース ― テーブル型データ表現のハッシュと XML 間の変換 | メイン | Perl による G.711 の処理 »

ネットワーク・通信

Perl によって UDP ポートを “たたく” プログラム

複数のコンピュータをネットワークを介してつなぎ,それらにのせられたアプリケーションのあいだで相互に通信させる実験をするとき,実験を起動するのに,最初に通信をおこなうアプリケーションのポートをたたくようにするのが便利である. この目的で内容のない UDP (User Datagram Protocol) メッセージをおくるプログラムを書いてみた (UDP を TCP にかえるのは容易であるが,受信プログラムはやや複雑になる).

なんということはないプログラムだが,用意しておくと (すくなくとも私のばあいは) やくにたつ. 内容がからだと誤動作する可能性があるなら,特定の内容をいれて,それをアプリケーションでチェックするようにすればよい. たたくアドレスやポートをコマンド引数としてあたえられるようにすれば便利かもしれないが,ここではプログラムのなかであたえている. (このほうが,何度もつかうときに,いちいちコマンド引数をあたえる必要がないので私にとっては便利である.)

#!/usr/bin/perl
##############################################################################
#
#       UDP port kicker
#
##############################################################################

use strict;
use Socket;

my $IP = '192.168.0.3'; # destination
my $REMOTE_PORT = 8000;
my $LOCAL_PORT = 8000;

socket(SOCK, AF_INET, SOCK_DGRAM, getprotobyname('udp')) ||
    die "socket(SOCK)$!\n";

setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) ||
    die "setsockopt()$!\n";

bind(SOCK, pack_sockaddr_in($LOCAL_PORT, INADDR_ANY)) ||
    die "bind(SOCK)$!\n";

send(SOCK, '', 0, pack_sockaddr_in($REMOTE_PORT, inet_aton($IP)));
send(SOCK, '', 0, pack_sockaddr_in($REMOTE_PORT, inet_aton($IP)));

close(SOCK);

1;

2010-3-7 改訂:
1 行よけいな行があったのと,変数名に不適切なものがあったのなどをなおした. まえのプログラムはテストしてなかったが,これはテストずみ.

Keywords:

トラックバック

このエントリーのトラックバックURL:
http://www.kanadas.com/mt/mt-tb.cgi/1629

コメントを投稿

このページについて

2007-11-14 21:44 に投稿されたエントリーのページです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.
Powered by
Movable Type 3.36