rambo2_981 has asked for the wisdom of the Perl Monks concerning the following question:

I’m new to Perl and am trying to set a variable length byte array that is passed to a socket as a string for output. I have the following which works, but the commented out code doesn’t. What am I doing wrong? Thanks.

use IO::Socket; use Time::HiRes qw(usleep ualarm gettimeofday tv_interval); my $sock = new IO::Socket::INET( PeerAddr => '10.10.2.141', PeerPort = +> '50000', Proto => 'udp' ); die "no socket\n" unless $sock; $totalNumPkts = 1; $pktSize = 512; $dataVal = 'U'; $iPkt = “1“; for ( $i = 1; $i < $pktSize; $i++ ) { $iPkt += "1"; } $startTime = Time::HiRes::time; for ( $i = 1; $i <= $totalNumPkts; $i++ ) { print "sending msg .."; $sock->print( "Hello\n" ); #$sock->print( $iPkt ); } $endTime = Time::HiRes::time; $totalTime = $endTime - $startTime; printf( " st %f end %f total time=%f time/pkt=%f\n", $startTime, $endT +ime, $totalTime, $totalTime / $totalNumPkts ); printf("done\n"); close( $sock );
  • Comment on How do I create a variable length byte array for socket transmission?
  • Download Code

Replies are listed 'Best First'.
Re: How do I create a variable length byte array for socket transmission?
by dave_the_m (Monsignor) on Jan 10, 2006 at 14:19 UTC
    $iPkt = “1“; for ( $i = 1; $i < $pktSize; $i++ ) { $iPkt += "1"; }
    You're using numerical addition rather than string concatenation. try the following instead:
    $iPkt .= "1";
    or even better, replace the whole loop with
    $iPkt = “1“ x $pktSize;
    Finally, if you want to send data more complex than just a stream of ASCII "1"s, especially binary data, then you may want to check out the pack() function.

    Dave.