in reply to Telnet responses

If it's not a telnet server but a plain connection, you might be better off using something like IO::Socket::IP

It's simple enough and there are many examples/explainythings out there already. But basically, you'd do something like this (untested pseudo-code):

use v5.36; ... # Connect in "blocking" mode my $socket = IO::Socket::IP->new( PeerHost => '192.168.1.181', PeerPort => 12345, Proto => 'tcp', ); if(!defined($socket)) { die("Connection failed"); } # Switch to non-blocking send/receive mode so we can implement timeout +s $socket->blocking(0); $socket->send("AT\n"); waitFor($socket, 'AT'); $socket->send("AT1122\n"); my $oid = waitFor($socket, 'AT%23=1234', 1); ... sub waitFor($socket, $searchstring, $caseinsensitive = 0) { while(1) { my $line = readsocketline($socket, 20); if($casesensitive) { if($line =~ /$searchstring/i) { return $line; } } elsif($line =~ /$searchstring/) { return $line; } } } sub readsocketline($socket, $timeout = 30) { if(!defined($timeout) || !$timeout) { $timeout = 30; }; my $failat = time + $timeout; my $line = ''; while(1) { my $char = ''; $socket->recv($char, 1); if(time > $failat) { die("Network timeout"); } next if(!defined($char) || $char eq ''); next if($char eq "\r"); last if($char eq "\n"); $failat = time + $timeout; $line .= $char; } return $line; }

If you need an ecrypted connection, you can use IO::Socket::SSL as a base for your connection. (For more complex protocols/connection that use optional encryption and/or use something like Unix Domain Sockets, you'd connect normally first, then use IO::Socket::SSL->start_SSL() to upgrade).

PerlMonks XP is useless? Not anymore: XPD - Do more with your PerlMonks XP

Replies are listed 'Best First'.
Re^2: Telnet responses
by haukex (Archbishop) on Oct 20, 2023 at 11:15 UTC

      You are right, of course. If you can go higher level, you should.

      I usually go relatively low level on answers to SoPW and avoid using any frameworks that have their own control loops. This makes it easier for OP to integrate it into their own software that may have their own control loop already.

      (Besides, i love doing low level protocol stuff. It's a cavac thing.)

      PerlMonks XP is useless? Not anymore: XPD - Do more with your PerlMonks XP