Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re: CLIENT help!

by Anonymous Monk
on Jun 10, 2012 at 12:22 UTC ( #975421=note: print w/replies, xml ) Need Help??

in reply to CLIENT help!

Hello! I am having trouble with a socket server and client interaction. I want to execute a perl script by default when a client TELNETs into my server. I tried this once, but it ran the script on the server's side, and not the client's side. Help?!

You mean to say, when somebody (a client) speak (opens socket) to you (your server), you want to make that somebody sing opera (run your program)?

You can't do that without prior agreement (client install your software ), esp using telnet, since that is mind control (security violation)

Replies are listed 'Best First'.
Re^2: CLIENT help!
by tobyink (Abbot) on Jun 10, 2012 at 22:01 UTC


    Though perhaps what the questioner actually wants is to run the script at the server end, but display the script's output at the client end? (And is just not expressing that especially clearly.) That is, after all, a fairly common desire.

    In which case, it's something along these lines...

    my $output = `perl`; print CLIENT $output;
    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

      I tried it, and added the lines:

      my $output = `perl`; print CLIENT $output;

      But it just prints "smile from the server" and doesnt run the perl program. :-/

      Here is the total code:

      #! /usr/bin/perl -w # #-------------------- #use strict; use Socket; # use port 7890 as default my $port = shift || 7890; my $proto = getprotobyname('tcp'); # create a socket, make it reusable socket(SERVER, PF_INET, SOCK_STREAM, $proto) or die "socket: $!"; setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!"; # grab a port on this machine my $paddr = sockaddr_in($port, INADDR_ANY); # bind to a port, then listen bind(SERVER, $paddr) or die "bind: $!"; listen(SERVER, SOMAXCONN) or die "listen: $!"; print "SERVER started on port $port "; # accepting a connection my $client_addr; while ($client_addr = accept(CLIENT, SERVER)) { # find out who connected my ($client_port, $client_ip) = sockaddr_in($client_addr); my $client_ipnum = inet_ntoa($client_ip); my $client_host = gethostbyaddr($client_ip, AF_INET); # print who has connected print "got a connection from: $client_host","[$client_ipnum] "; # send them a message, close connection print CLIENT "Smile from the server\n"; # open CLIENT, ("system ("perl");"); # open (CLIENT, "system ("perl")"); # open CLIENT, "do `perl`"; #my $status = CLIENT, system("perl"); #CLIENT $status = CLIENT, system("perl"); my $output = `perl`; print CLIENT $output; close CLIENT; }

        So, what does do? Does it actually generate output? Does it compile? Does it even exist?

        PS: commenting out your use strict; is a pretty bad idea. Ignoring problems doesn't solve them...

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://975421]
and the shadows deepen...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2018-06-18 00:36 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (107 votes). Check out past polls.