Страница 1 из 1

а кто тут знает ПЕРЛ?

Добавлено: 12 фев 2009, 08:21
vinni_puh
есть перл клиент демо.

Клиент передает серверу строку с консоли. как переделать его, чтобы по нажатии на Ентер он передавал бинарный месседж написаный в теле программы ?



#!/usr/bin/perl
use IO::Socket::INET;
use strict;

my $name = shift
or die "Missing server name\n";
my $port = shift
or die "Missing port number\n";

my $socket = IO::Socket::INET->new('PeerAddr' => $name,
'PeerPort' => $port,
'Proto' => 'tcp')
or die "Can't create socket ($!)\n";
print "Client sending\n";
while (<STDIN>) {
print $socket $_;
print scalar <$socket>;
}
close $socket

Re: а кто тут знает ПЕРЛ?

Добавлено: 13 фев 2009, 02:32
Ильгиз
Достаточно знать Гугл, чтобы найти детали.

Код: Выделить всё

#!/usr/bin/perl
use Errno qw(:POSIX);
use IO::Socket::INET;
use strict;

my $name = shift
or die "Missing server name\n";
my $port = shift
or die "Missing port number\n";

my $socket = IO::Socket::INET->new('PeerAddr' => $name,
    'PeerPort' => $port,
    'Proto' => 'tcp',
    'Blocking' => 0)
    or die "Can't create socket ($!)\n";
print "Enter a string or a comma \",\" or a period \",\"...\n";
$| = 1;
while (<STDIN>) {
    chomp($_);
    ($_ ne ".") || last;
    if ($_ ne ",") {
        print "Sending \"$_\"\\r\\n...\n";
        my $numwritten;
        defined($numwritten = send($socket, $_ . "\r\n", 0)) || die "send: $!";
        if (!($numwritten)) { print "send: Remote end closed connection.\n"; last; }
    }
    print "Receiving...\n";
    my $recv_err = 0;
    my $buf = "";
    # 512-byte transfers are guaranteed to go in one chunk, so
    # the EAGAIN condition below will not happen if any data  are
    # available.
    my $remote = recv($socket, $buf, 512, 0);
    $recv_err = $!;
    # print "errno " . (0 + $recv_err) . "\n";
    !($buf) || print "$remote<<<" . $buf . ">>>\n";
    if ($recv_err == &Errno::EAGAIN) {
        print "(deferring till next time...)\n";
    } elsif ($recv_err) {
        die "recv: $recv_err";
    } elsif (!($buf)) { 
        print "recv: Remote end closed connection.\n"; 
        last; 
    }
    print "Enter a string or a comma \",\" or a period \",\"...\n";
}
print "Closing socket...\n";
close $socket;
print "Done.\n";

Код: Выделить всё

$ work/send.pl www.google.ca 80
Enter a string or a comma "," or a period ","...
GET /
Sending "GET /"\r\n...
Receiving...
(deferring till next time...)
Enter a string or a comma "," or a period ","...

Sending ""\r\n...
Receiving...
<<<HTTP/0.9 302 Found
Location: http://www.google.ca/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=2de61b4f690dcb15:TM=1234521821:LM=1234521821:S=crsJEWXb0dLOhe3A; expires=Sun, 13-Feb-2011 10:43:41 GMT; path=/; domain=.google.com
Date: Fri, 13 Feb 2009 10:43:41 GMT
Server: gws
Content-Length: 218

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="ht>>>
Enter a string or a comma "," or a period ","...
,
Receiving...
<<<tp://www.google.ca/">here</A>.
</BODY></HTML>
>>>
Enter a string or a comma "," or a period ","...
,
Receiving...
recv: Remote end closed connection.
Closing socket...
Done.