in reply to Perl Sockets

I wanted to send the the perl code but when I inserted it here it was a mess.

Putting the code in <c>...</c> tags will keep the format and escape what needs to be escaped. For best results, keep the code minimal. Remove everything from it until you can't remove anything else without making the problem go away.

By the way, it would help to place paragraph breaks in your text. Do so by adding <p> at the start of every paragraph.

Replies are listed 'Best First'.
Re^2: Perl Sockets
by crawfordr (Acolyte) on Jul 19, 2007 at 18:20 UTC
    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"; }