Hello, Could you take a look at this, it should be working. I have been told now that it is possible that the ip address/port that I am using may not be configured to receive SEND messages. Anyway, could you look at the code and make any suggestions. Thanks. here is my perl coded program:
#!/usr/bin/perl -w
require 5.002;
use strict;
use IO::Socket;
use IO::Select;
use DBI;
use DBD::Oracle;
our ($dbh);
our ($find_min_request_rec, $find_response_rec);
our ($price_call_rec, $price_response_rec);
our ($find_resp_pr1,$find_resp_pr2,$find_resp_pr3);
our ($find_resp_pr4,$find_resp_pr5);
our $read_set ;
our $rh;
our $ns;
our $buf;
our $find_resp;
our $iroam_req_type;
# Create the receiving socket
my $s = new IO::Socket::INET (
LocalHost => '172.17.8.201', # IP Address Host to list
+en on
LocalPort => '18490', # Port Number Host to listen on
Proto => 'tcp',
Listen => 5,
Reuse => 1,
);
die "Could not create socket: $!\n" unless $s;
$read_set = new IO::Select(); # create handle set for reading
$read_set->add($s); # add the main socket to the set
connect_to_oracle_db();
print "At Host/Port listening...\n";
while (1) { # Continous Listening on Port for a connection
# get a set of readable handles(blocks until at least one handle is
+ ready)
my ($rh_set) = IO::Select->select($read_set, undef, undef, 0);
# take all readable handles in turn
foreach $rh (@$rh_set) {
print "Process each readable handle...\n";
print "Value of rh is $rh...\n";
print "Value of rh_set is @$rh_set..\n";
# if it is the main socket then we have an incoming
# connection and we should accept() it and then add
# the new socket to the $read_set
if ($rh == $s) {
print "Main socket/incoming connection add to readable set\n";
$ns = $rh->accept();
$read_set->add($ns); ##already added at beginning
print "Value of rh_set is @$rh_set.after adding connection\n";
# otherwise it is an ordinary socket and we should read
#and process the request
}else{
print "Its an ordinary socket,so read and process the request
+...\n";
print "Connected from: ", $rh->peerhost();#Display Peer Co
+nnection
print " Port: ", $rh->peerport(), "\n";
$buf = <$rh>;
$iroam_req_type = substr($buf,0,8);#Extract the requestor type
print "Requestor type extracted is: $iroam_req_type\n";#Displa
+y Iroam req
if($buf) { # return normal input and process $buf
print "Iroam transaction recd:\n";# Iroam Data
print "$buf\n"; #Display value of the Iroam data from Iroa
+m
if ($iroam_req_type =~ /FindMin/){
$find_min_request_rec = $buf;
}elsif ($iroam_req_type =~ /PriceCall/){
$price_call_rec = $buf;
}
pass_transaction_to_iroam_package();
$rh->send($find_response_rec);
print "rh send value is: $rh->send($find_response_rec) \n";
}else { # the client has closed the socket
print "Iroam client has closed the socket.\n";
# remove the socket from the $read_set and close it
$read_set->remove($rh);
close($rh);
}
}
}
}
sub connect_to_oracle_db{
print "Connect to the Oracle Database sub....\n";
$dbh = DBI->connect(
'DBI:Oracle:dev',
'perluser',
'oraperl',
{AutoCommit => 0, RaiseError => 1}
) or die "Couldn't connect to database:".DBI->errstr;
}
sub pass_transaction_to_iroam_package{
print "pass transaction to iroam package sub....\n";
my $v_param_iroam_resp;
if ($iroam_req_type =~ /FindMin/){
my $csr = $dbh->prepare(q{
begin
:v_param_iroam_resp:= WIRELESS_IROAM_PKG.Lookup_
+Min_Request(:find_min_request_rec);
end;
});
$csr->bind_param(":find_min_request_rec", $find_min_request_rec
+);
$csr->bind_param_inout(":v_param_iroam_resp", \$v_param_iroam_r
+esp,400);
$csr->execute()
or die "Couldn't exe pass transaction iroam pkg sub ".DBI->err
+str;
$find_response_rec = $v_param_iroam_resp;
$find_resp_pr1 = substr($find_response_rec ,0,90);
$find_resp_pr2 = substr($find_response_rec ,91,90);
$find_resp_pr3 = substr($find_response_rec ,182,90);
$find_resp_pr4 = substr($find_response_rec ,273,90);
$find_resp_pr5 = substr($find_response_rec ,364,11);
}elsif ($iroam_req_type =~ /PriceCall/){
my $csr = $dbh->prepare(q{
begin
:v_param_iroam_resp:= WIRELESS_IROAM_PKG.Price
+_Call(:price_call_rec);
end;
});
$csr->bind_param(":price_call_rec", $price_call_rec);
$csr->bind_param_inout(":v_param_iroam_resp", \$v_param_iroam_res
+p,400);
$csr->execute() or die "Couldn't exe pass iroam pkg sub ".DBI->er
+rstr;
$price_response_rec = $v_param_iroam_resp;
print "Value of v param iroam resp is: $v_param_iroam_resp\n";
print "Value of price response is: $price_response_rec \n";
}
print "Processed transaction through the Iroam package\n";
}
|