in reply to Re^4: exchanging strings on the network
in thread exchanging strings on the network

I think your code never enters this loop
while(<$client>) { print $_; print $client "Username $user Pass $pass";}
I think what you need is more like this:
print $client "Username $user Pass $pass"; while(<$client>) { print $_; <STDIN>; #read input from user (changes $_!) print $client $_; }
For the other part, I don't see why this (code below) would not work. again. if the variables contain what they should. Always check your input!
$host = $ARGV[2]; #or whatever it is in your ARGV $port = $ARGV[4]; my $client = IO::Socket::INET->new( PeerAddr => $host, PeerPort => $port,


holli, /regexed monk/

Replies are listed 'Best First'.
Re^6: exchanging strings on the network
by bahadur (Sexton) on May 10, 2005 at 11:11 UTC
    ok the code is working now. there is a problem with it. the first string from the server reaches the client immediately. how ever the string from the client containing the user name password is not displayed on the server side. but if i control+c and exit than it displays the string. but if i terminate from the server side nothing is displayed.
      STDOUT is line buffered by default, meaning you won't see any text until you print a newline to it (or until perl exits and flushes its buffers on its way out):
      print "one two three"; sleep 5; print "four five six\n";
      This should stay blank for 5 seconds and then print out all of the text. If you want your prints to STDOUT to appear immediately, set the global variable $| to 1. This sets autoflushing on the currently selected filehandle, which by default is STDOUT:
      $|++; print "one two three"; sleep 5; print "four five six\n";
      This should print out the first line, sleep 5 seconds, and then print out the second. Easy! Keep in mind terminals buffer output for performance reasons, so don't do this if you're printing out a large amount of data. You probably won't hit this wall while you're still learning, though.

      Update: Ah, sorry, not quite. The problem is this: print $client "Username $user Pass $pass"; You don't send through a "\n" at the end. The client is done sending data so it tries to read from the socket again, but the server is still blocking, waiting for a newline that will never arrive. This is what's known as a deadlock.