in reply to Re: Terminal across network
in thread Terminal across network

I apologize if I am not able put my word across. Let me try again. Infact, I got to boil the concept down and got to implement it in perl. Premises: There are two machines A and B connected in network. I am talking about issue related to Network Management. For the time being, I will stick to telnet. What normally happens when A telnets to B:- In the command line we need to login and type password. After authentication, A is logged in to B and has access to shell of B. What I need :- From A, I telnet to B through script, and in response B should pop it's window or screen in Machine A. What exactly i mean is, B should spawn a thread which create a shell window in machine A. In effect, if I switch off machine B, the shell window of machine B in A should, disappear. Till now what I have analysed is, this has something to do with XServer or a XWindow. I am clueless about how to implement it in perl.
cheers Rock

Replies are listed 'Best First'.
Re^3: Terminal across network
by castaway (Parson) on Oct 21, 2004 at 07:53 UTC
    Ah, that makes some more sense. You mean you would like a window, like a normal terminal, in which the user of your script can type commands, that then happen on the machine you are connected to?

    If I understood correctly now, then you don't need to start a different program to achieve this, you can just get your perl script to 'listen' on STDIN, and to the telnet socket. When the user types something in the window that the perl script is running in, the script sends it to the remote machine via the telnet socket. The answer comes back via the telnet socket, and is printed to STDOUT in the normal way. Does that make sense? And is it enough?

    Coincidentally, I have written several programs of this type. im2 is one of them (but it's code is complex).

    What you need are: IO::Socket::INET for the telnet connection (or maybe Net::Telnet) and IO::Select to check whether STDIN or the socket have data waiting, and deal with it appropriately.

    Is that enough to start with?

    C.

      Thanx for the rejoinder. I really appreciate. Now the requirement is clear to me. Let me work on it and come up with some code. However, it would be very kind of you, if you can direct me to more low level design. I mean in which machine perl script should be executed, how should I process inputs in STDIN. Should the window should be created by perl script.Frankly speaking, picture is not crystal clear to me.
      cheers Rock
        Here's a snippet from one I wrote earlier. (A perl telnet client actually, which seems to be essentially what you want) :
        my $sockets = new IO::Select(); $sockets->add(\*STDIN); my $tel = new IO::Socket::INET( PeerAddr => $hostname, PeerPort => $port, Proto => 'tcp', Timeout => 60 ); die "Can't connect to $hostname ($!)" unless $tel; $sockets->add($tel); while(1) { my @handles; @handles = $sockets->can_read(0.5); foreach $handle (@handles) { if($handle == $tel) { $data = <$tel>; last if(!$data); print STDOUT $data; } elsif ($handle == \*STDIN) { $line = <STDIN>; chomp($line); if ($line eq 'q' || $line eq 'quit') { $finish = 1; last; } else { print $tel $line."\r\n"; } } } }
        I've simplified it some, you will need to probably read from the telnet socket using recv instead of <>, since this will hang when telnet sends lines without endling newline characters (which it is apt to do).

        C.