есть перл клиент демо.
Клиент передает серверу строку с консоли. как переделать его, чтобы по нажатии на Ентер он передавал бинарный месседж написаный в теле программы ?
#!/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
а кто тут знает ПЕРЛ?
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- vinni_puh
- Маньяк
- Сообщения: 1833
- Зарегистрирован: 31 янв 2005, 06:45
- Откуда: Toronto, Canada
- Ильгиз
- Пользователь
- Сообщения: 55
- Зарегистрирован: 13 сен 2005, 12:00
- Откуда: Уфа - Китченер
Re: а кто тут знает ПЕРЛ?
Достаточно знать Гугл, чтобы найти детали.
Код: Выделить всё
#!/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.