Socket.pm & print

Jakub Dadak dadman na brainsys.cz
Pátek Září 11 08:21:15 MEST 1998


Zdravim,

    potrebuji shodou okolnosti napsat v perlu jednoduchou aplikaci
se sockety. Resp. jednoducheho klienta a server. Mam vsak problemy
se zapisem funkci print. Server ceka po spusteni na radek od
klienta $line = <Client>; A klient jej posila takto: print "ahoj\n";
Server vsak ceka a nic neprijme, predpokladam, ze to klient
nevyprazdni buffer a ceka na dalsi data, ale mate me ten enter na konci.
Kdyz stejna data poslu takto: $data = "ahoj\n"; syswrite SOCK, $data, 5;
no tak vsechno jede OK. Videl jsem spoustu prikladu s pouzitm print,
proc to nejde me ? Existuje nejaka moznost jako u IO:Socket Autoflush ?

        Diky
                        JD


--
  ,{(~)~(},       Dadak Jakub             Brain Systems s.r.o.
,( ((~) ){){}     dadman at brainsys.cz   Rybkova 1
())~{)}{{}~()}    http://www.brainsys.cz  Brno 602 00
`~^    ^~{()}     Tel. +420 5 41148704    Fax. +420 5 41148852
           ~~     Motto:                  Things are different !

PS: Prikladam kod


Server :

#!/usr/bin/perl -Tw
require 5.002;
use strict;
use Socket;
use Carp;

my $port = shift || 6666;
my $proto = getprotobyname('tcp');
$port = $1 if $port =~ /(\d+)/; # untaint port number

socket(Server, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) or die
"setsockopt: $!";
bind(Server, sockaddr_in($port, INADDR_ANY))        || die "bind: $!";
listen(Server,SOMAXCONN)                            || die "listen: $!";
print "Server started on port $port\n";

  my $paddr;

$SIG{CHLD} = \&REAPER;

for ( ; $paddr = accept(Client,Server); close Client) {
    print "Connected\n";
    my $line;
    $line = <Client>;
    print Client $line;
}


Client:

#!/usr/bin/perl -w
require 5.002;
use strict;
use Socket;
my ($remote,$port, $iaddr, $paddr, $proto, $line);

$remote  = shift || 'localhost';
$port    = shift || 6666;  # random port
$iaddr   = inet_aton($remote)               || die "no host: $remote";
$paddr   = sockaddr_in($port, $iaddr);

$proto   = getprotobyname('tcp');
socket(SOCK, PF_INET, SOCK_STREAM, $proto)  || die "socket: $!";
connect(SOCK, $paddr)    || die "connect: $!";
$line = "ahoj\n";
# syswrite(SOCK, $line, 5);            # JEDE !!!!!!!!!!
print SOCK "$line\n";                  # NEJEDE !!!!!!!!

$line = <SOCK>;
print "Vysledek = $line\n";

close (SOCK) || die "close: $!";













Další informace o konferenci Perl