作者 主題: [原創]傳送簡訊至 HINET(PERL)  (閱讀 3463 次)

0 會員 與 1 訪客 正在閱讀本文。

asako

  • 活潑的大學生
  • ***
  • 文章數: 241
    • 檢視個人資料
[原創]傳送簡訊至 HINET(PERL)
« 於: 2006-09-07 09:48 »
第一次寫class,大部份改至hinet的公用程式。
目前程式已可以用,想問一下 sms_hinet.pm 還有什麼要改的嗎?


EXAMPLE:
#!c:/Apache2/Perl/bin/Perl.exe
use sms_hinet;
my $new_sms=sms_hinet->new();;
$new_sms->user_account('8888');
$new_sms->user_password('9999');
$new_sms->mobile_number('0806449');
$new_sms->message("簡訊內容");
if ($new_sms->check_hinet_account()==0) {
$new_sms->sendmsg();
}




====將以下存成 sms_hinet.pm ====
package sms_hinet;
use Socket;
#作者:我本善良   :asakous(at)yahoo.com.tw
#版權:請自由取用,但請不要拿掉作者是誰。
sub new {
        my $self  = {};
        $self->{ACCOUNT}   = undef;
        $self->{PASSWORD}    = undef;
      $self->{msg}    = undef;
      $self->{interface_type}    = 0;
      $self->{msg_type}    = 0; # 0:檢查帳號密碼 1:傳送簡訊
      $self->{send_type}    = 100; # 100即時傳送
      $self->{mobile_number}    = undef;
        bless($self);            
        return $self;
    }

   sub user_account {
        my $self = shift;
        if (@_) { $self->{ACCOUNT} = shift }
        return $self->{ACCOUNT};
    }
    sub user_password {
        my $self = shift;
        if (@_) { $self->{PASSWORD} = shift }
        return $self->{PASSWORD};
    }
   
       sub interface_type {
        my $self = shift;
        if (@_) { $self->{interface_type} = shift }
        return $self->{interface_type};
    }
   
       sub msg_type {
        my $self = shift;
        if (@_) { $self->{msg_type} = shift }
        return $self->{msg_type};
    }

       sub send_type {
        my $self = shift;
        if (@_) { $self->{send_type} = shift }
        return $self->{send_type};
    }   
   
       sub message {
        my $self = shift;
        if (@_) { $self->{msg} = shift }
        return $self->{msg};
    }   


   sub mobile_number {
        my $self = shift;
        if (@_) { $self->{mobile_number} = shift }
        return $self->{mobile_number};
    }   
   
sub check_hinet_account {

 my $self = shift;
  $proto = getprotobyname('tcp');
  $i_addr = inet_aton('203.66.172.131');
  $paddr = sockaddr_in('8000', $i_addr);
  socket(SOCK, PF_INET, SOCK_STREAM, $proto);
  connect(SOCK, $paddr) or die "\n### Error: Couldnot using socket to connect to remote_host(203\.66\.172\.131:8000) : $! ";

  #檢查帳號密碼
  $dd = $self->{ACCOUNT} . "\0" . $self->{PASSWORD} . "\0";
  $tmp = pack("C",$self->{interface_type}) . pack("C",$self->{msg_type}) . pack("C",length($dd)) . $dd ;  

  my $send_length = send( SOCK, $tmp, 0 );

  my $scalar="" ;
  my $ret_length = recv( SOCK, $scalar, 129, 0 );


  my $return_c = substr $scalar,0,1 ;
  my $return_code = unpack("c", $return_c);
 
  my $return_message_length = length $scalar;
  $return_message_length--;
  my $return_message = substr $scalar, 1, $return_message_length;

  return $return_code;

}   

sub sendmsg {
      my $self = shift;
     $self->{msg_type} =1;   
     my $dd = $self->{mobile_number} . "\0" . $self->{msg} . "\0";
     my $tmp = pack("C",$self->{interface_type}) . pack("C",$self->{msg_type}) . pack("C",length($dd)) . $dd . pack("C",$self->{send_type});  
     my $send_length = send( SOCK, $tmp, 0 );
     my $scalar="" ;
     my $ret_length = recv( SOCK, $scalar, 129, 0 );
     #print "\n rec data:" . $scalar;
     my $return_c = substr $scalar,0,1 ;
     my $return_code = unpack("c", $return_c);
     my $return_message_length = length $scalar;
     $return_message_length--;
     my $return_message = substr $scalar, 1, $return_message_length;
   return $return_code;

     
}
   
sub close_session {

my $self = shift;
close(SOCK);
}

1;


====sms_hinet.pm完=========