#!/usr/bin/perl use Socket; use strict; use FileHandle; my $bit; my @frame; my $flag; my @message; &Server; sub Server{ use Socket; use Carp; my ($port, $proto, $paddr, $iaddr, $name); sub logmsg { print "$0 $$: @_ at ", scalar localtime, "\n"; } $port = shift || 4000; 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)) or die "bind: $!"; listen(Server, SOMAXCONN) or die "listen: $!"; logmsg "server started on port $port, type ^c to terminate"; for( ; $paddr = accept(Client, Server); close(Client)) { ($port, $iaddr) = sockaddr_in($paddr); $name = gethostbyaddr($iaddr, AF_INET); logmsg "connection from $name [", inet_ntoa($iaddr), "] at port $port"; @frame=(); autoflush Client; while ($bit=){ # print $bit; if ($bit ne "!\n"){ $bit =~ s/1(\d*)\n/1/; print "$bit"; push(@frame,$bit); } else { $flag=&Check; if ($flag == 1){print Client "ACK\n";} else {print Client "NACK\n";} } ###Convert binary back to ASCII #&Convert_To_ASCII; } } ###Print to output file open (OUT, "output.dat") || die "Can't open input.dat: $!\n"; print OUT "@message, \n"; close OUT; } ###This is very similar to Generate_CRC in sender.pl sub Check { my @pattern=(1,1,0,1,0,1,1,1,0,0,1,0,0,1,1,0,1); my $Q=0; my $P=0; my $FCS; $Q=&Convert_To_B10(@frame); $P=Convert_To_B10(@pattern); $FCS=$Q%$P; if ($FCS == 0) { return (1); } else { return (-1); } } sub Convert_To_B10 (@){ my @string=@_; my $total; my $index; my $value; $total=@string; for ($index=0;$index<$total;$index++){ $value+=$string[$index]*2**($total-$index-1); } return($value); } sub Convert_To_ASCII { my $index=0; my $index2; my @byte; my $numeric=0; my $character=0; while ($index ne 64) { @byte=(); for ($index2=0, $index2<8, $index2++) { push(@byte, $frame[$index]); $index++; } $numeric=Convert_To_B10(@byte); print "Numeric is $numeric \n"; $character=chr($numeric); print "Character is $character \n"; push(@message, $character); } } sub Generate_CRC { my @pattern=(1,1,0,1,0,1,1,1,0,0,1,0,0,1,1,0,1); my $Q=0; my $P=0; my $FCS; }