[Tokyo.pm] じゃんけんサーバもどき

Keiichi Okabe okabek @ beige.ocn.ne.jp
2003年 7月 21日 (月) 11:40:33 CDT


岡部です.

テスト用に作ったじゃんけんサーバもどきのスクリプトも流します.
こちらは「もどき」なので,後でちゃんと動くものも作る予定.
動作環境はさっきと同じで,ActivePerl Build804
v5.8.0 MSWin32-x86-multi-thread 版です

-----------------------------------------------------------
#!perl -w
# jyanken_sv.pl
#  for ll-saturday at 030809
#   by keiichi @ tokyo.pm.org

use IO::Socket;
use Net::hostent;
use strict;

my ($remote,$remote_port,$local_port);
my ($notify,$poll,$status,$message,$sender);
my (@hand,$hostinfo,$str);
my ($ip,$port);

$local_port = 2003;

$notify = IO::Socket::INET->new(
  Proto     => 'tcp',
  LocalPort =>  $local_port,
  Listen    =>  SOMAXCONN,
  Reuse     =>  1
) or die "can't setup server";

$sender = $notify->accept;
$hostinfo = gethostbyaddr($sender->peeraddr);
printf "Connect from %15s\n",$hostinfo->name;

undef $str;
while(<$sender>){
  $str .= $_;
}
($ip,$port) = $str =~ m/([^:]+):(\d+)/;
printf "Connect to %s port %d\n",$ip,$port;

print "First time\n";
for (1..10){
  $poll = IO::Socket::INET->new(
    Proto    => 'tcp',
    PeerAddr =>  $ip,
    PeerPort =>  $port
  ) or die "can't connect to port $port on $ip:$!";

  print $poll "CALL\r\n";
  while(<$poll>){
    print $_;
  }
  $poll->close;
}

print "To go second time\n";
$status = IO::Socket::INET->new(
  Proto => 'udp',
  PeerAddr => $ip,
  PeerPort => 2003
) or die "can't connect to udp port on $ip:$!";

$status->send("100\r\n");
$status->close;

print "Second TIme\n";
for (1..10){
  $poll = IO::Socket::INET->new(
    Proto    => 'tcp',
    PeerAddr =>  $ip,
    PeerPort =>  $port
  ) or die "can't connect to port $port on $ip:$!";

  print $poll "CALL\r\n";
  while(<$poll>){
    print $_;
  }
  $poll->close;
}

$status = IO::Socket::INET->new(
  Proto => 'udp',
  PeerAddr => $ip,
  PeerPort => 2003
) or die "can't connect to udp port on $ip:$!";

print "To go third time\n";
$status->send("100\r\n");
$status->close;

print "Third time\n";
for (1..10){
  $poll = IO::Socket::INET->new(
    Proto    => 'tcp',
    PeerAddr =>  $ip,
    PeerPort =>  $port
  ) or die "can't connect to port $port on $ip:$!";

  print $poll "CALL\r\n";
  while(<$poll>){
    print $_;
  }
  $poll->close;
}

-----------------------------------------------------------

-- 
okabek @ beige.ocn.ne.jp  岡部 恵一
成功出於衆者、先知也、先知者、必取於人、知敵之情者也
          孫子 用間篇 第十三



Tokyo-pm メーリングリストの案内