Ich komm hier einfach nicht weiter. Kann mir jemand erklären warum der Server die Daten von <STDIN> nicht bekommt ?
#!/usr/bin/perl
#tcpserver.pl
print "TCP-Server\n\n\n";
use IO::Socket;
use IO::Select;
use strict;
use warnings;
# flush after every write
$| = 1;
my($lsn) = IO::Socket::INET->new( Listen => 5,
LocalPort => 5000,
Proto => 'tcp',
Blocking => 0,
) or die "Error in Socket Creation : $!\n";
my($sel) = new IO::Select($lsn);
print "SERVER Waiting for client connection on port 5000\n";
while (my(@ready) = $sel->can_read) {
foreach my $fh (@ready) {
if ($fh == $lsn) {
# Jetzt hast du eine Verbindung zu einem Client, über die du solange
#Daten austauschen kannst bis sie beendet wird.
# Ich würde $new_client z.B. in einem Array oder Hash unterbringen, da
#du darüber den Client ansprichst.
my($new_client) = $lsn->accept;
$sel->add($new_client);
# Was auch immer du mit $new_client vorhast, kommt hier
}
else {
# In diesem Abschnitt wird einer der Clients etwas gesendet haben.
# $client ist dasselbe wie $fh, ich leg zu meiner besseren Übersicht
#halt immer $client an
my($client) = $fh;
my($string) = <$client>; # Jetzt hast du in $string das stehen, was ein
#Client gesendet hat.
# Was auch immer du mit nem String machen willst, das kommt dann hier.
print "Daten: $string\n";
}
}
}
#!/usr/bin/perl
#tcpclient.pl
print "TCP-Client\n\n\n";
use IO::Socket::INET;
use strict;
use warnings;
my ($data,$length);
# flush after every write
$| = 1;
# creating object interface of IO::Socket::INET modules which internally creates
# socket, binds and connects to the TCP server running on the specific port.
my $socket = new IO::Socket::INET (
PeerHost => '127.0.0.1',
PeerPort => '5000',
Proto => 'tcp',
Blocking => 0,
) or die "ERROR in Socket Creation : $!\n";
print "TCP Connection Success.\n\n";
# read the socket data sent by server.
while(1)
{
print "Bitte Text eingeben : ";
$data= <STDIN>;
$socket->send("$data\0");
$socket->recv($data,1024);
print ("Received from Server : $data\n\n");
}
$socket->shutdown();