#!/usr/bin/perl
use Net::EasyTCP;
#my @nocrypt = qw(Crypt::RSA); #too slow, but more secure
#my @nocompress = qw(Compress::LZF); #just testing this feature
$server = new Net::EasyTCP(
host => "localhost",
mode => "server",
port => 2345,
password => "ztest",
donotcheckversion => 1,
# donotencryptwith => \@nocrypt,
# donotencrypt => 1,
# donotcompresswith => \@nocompress,
# donotcompress => 1,
welcome => "Hi! Wecome to the test server!\n",
)
|| die "ERROR CREATING SERVER: $@\n";
$server->setcallback(
data => \&gotdata,
connect => \&connected,
disconnect => \&disconnected,
)
|| die "ERROR SETTING CALLBACKS: $@\n";
$server->start() || die "ERROR STARTING SERVER: $@\n";
####################################################
sub gotdata() {
my $client = shift;
my $serial = $client->serial();
my $data = $client->data();
print "Client $serial sent me some data, sending it right back to them
+ again\n";
$client->send($data) || die "ERROR SENDING TO CLIENT: $@\n";
if ($data eq "QUIT") {
$client->close() || die "ERROR CLOSING CLIENT: $@\n";
}
elsif ($data eq "DIE") {
$server->stop() || die "ERROR STOPPING SERVER: $@\n";
}
}
#####################################################
sub connected() {
my $client = shift;
my $serial = $client->serial();
print "Client $serial just connected\n";
}
###################################################
sub disconnected() {
my $client = shift;
my $serial = $client->serial();
print "Client $serial just disconnected\n";
}
and a client
#!/usr/bin/perl
use Net::EasyTCP;
# a client
$client = new Net::EasyTCP(
mode => "client",
host => 'localhost',
port => 2345,
password => ztest
)
|| die "ERROR CREATING CLIENT: $@\n";
my $encrypt = $client->encryption();
my $compress = $client->compression();
print "encryption method ->$encrypt\ncompression method ->$compress\n"
+;
my $encryption = $client->encryption() || "NO";
my $compression = $client->compression() || "NO";
print "Using $encryption encryption and $compression compression\n\n";
#Send and receive a simple string
$client->send("HELLO THERE") || die "ERROR SENDING: $@\n";
$reply = $client->receive() || die "ERROR RECEIVING: $@\n";
print "$reply\n";
#Send and receive complex objects/strings/arrays/hashes by reference
#%hash = ("to be or" => "not to be" , "just another" => "perl hacker")
+;
#$client->send(\%hash) || die "ERROR SENDING: $@\n";
#$reply = $client->receive() || die "ERROR RECEIVING: $@\n";
#foreach (keys %{$reply}) {
#print "Received key: $_ = $reply->{$_}\n";
#}
#Send and receive large binary data
#for (1..4096) {
#for (0..255) {
#$largedata .= chr($_);
#}
#}
#$client->send($largedata) || die "ERROR SENDING: $@\n";
#$reply = $client->receive() || die "ERROR RECEIVING: $@\n";
#$client->close();
$client->send('Hello from Joe') || die "ERROR SENDING: $@\n";
$reply = $client->receive() || die "ERROR RECEIVING: $@\n";
print "$reply\n";
while(1){
$input = <STDIN>;
$client->send($input) || die "ERROR SENDING: $@\n";
$reply = $client->receive() || die "ERROR RECEIVING: $@\n";
print "$reply\n";
}
|