Leser: 23
$data = <$connection>;
my $test=unpack "C11",$data;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
elsif($self->param('downconfig')){ #$self->dd($self->{SHOPCONFIG}); $self->header( 'Content-Type' => 'application/octet-stream', 'Content-Disposition' => "Attachment; filename=shopcfg.$self->{LANG}", ); use bytes; foreach my $k(keys %{$self->{SHOPCONFIG}}){ my $klen = length $k; my $vlen = length $self->{SHOPCONFIG}{$k}; #die "$self->{SHOPCONFIG}{$k} $vlen"; $self->{CONTENT} .= pack("N",$klen).$k.pack("N",$vlen).$self->{SHOPCONFIG}{$k}; } } elsif($self->param('upload')){ my $fh = $self->param('upfile') or die "Keine Datei angegeben\n"; use bytes; my $buffer = ''; my %cfg = (); while( read($fh, $buffer, 4) ){ my $klen = unpack "N", $buffer; read($fh, $buffer, $klen); # key in buffer my $key = $buffer; read($fh, $buffer, 4); my $vlen = unpack "N", $buffer; read($fh, $buffer, $vlen); # value in buffer $cfg{$key} = $buffer; } $self->{SHOPCONFIG} = \%cfg; tied($self->{SHOPCONFIG})->write or die $@; $self->header( Status => "301 Moved", Location => $self->{URL}, ); }
2012-11-22T18:47:17 montiCode: (dl )my $test=unpack "C11",$data;
Ich blicke gerade nicht durch wie ich die paar Bytes zu verwertbaren Zeichen verwandelt bekomme.
my @octets = unpack("C11", $data);
1 2 3
my $s = pack("C11", (65..75)); my @test = unpack("C11", $s); print join(' : ', map {chr()} @test);
A : B : C : D : E : F : G : H : I : J : K
1 2 3 4 5
my $packet_length = 11; my $unpack_str = 'A' x $packet_length; my $s = pack("C11", (65..75)); print join(' : ', unpack($unpack_str, $s));
1
2
3
4
0x0000: 4500 0033 0807 0000 3806 3251 59cc 9a1b
0x0010: d458 802d 8cb1 261c 0fdc 7f81 6a40 8a4f
0x0020: 5018 7d78 144e 0000 3146 3736 3431 021f
0x0030: 0009 00
QuoteCode: (dl )$data = <$connection>;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
my $listen_socket = IO::Socket::INET->new( Listen => 1,
LocalPort => $tcpport,
LocalHost => $tcphost,
Proto => 'tcp',
Blocking => 0,
) or die "Error during creation of listening socket: $!\n";
my $select = new IO::Select($listen_socket);
while (my @ready = $select->can_read)
{
foreach my $connection (@ready)
{
if ($connection == $listen_socket)
{
my $client = $listen_socket->accept();
$select->add($client);
$data = <$connection>;
}
else
{
$data = <$connection>;
if ($data)
{
#macht irgendwas
}
else
{
$select->remove($connection);
close($connection);
}
}
}
}
1
2
3
4
5
6
if ($connection == $listen_socket)
{
my $client = $listen_socket->accept();
$select->add($client);
$client->recv($data,1024);
}
2012-11-23T10:44:28 montiDie Zahl "34" Ascii wird nicht zu 0x33h und 0x34h sondern direkt zu 0x34h.
1
2
3
4
0x0000: 4500 0033 0807 0000 3806 3251 59cc 9a1b E..3....8.2QY...
0x0010: d458 802d 8cb1 261c 0fdc 7f81 6a40 8a4f .X.-..&.....j@.O
0x0020: 5018 7d78 144e 0000 3146 3736 3431 021f P.}x.N..1F7641..
0x0030: 0009 00
1
2
3
4
$client->recv($data,1024);
my @test=unpack('C*', $data);
$data=join('',@test);
&do_log("Received data: $data");
Received data: 497055545249228090
1 2 3 4 5 6 7 8
for my $byte ( @bytes ) { # show as hex and use it my $dec = sprintf "%02x", $byte; # check it print $dec, "\n"; # even calculating works: print "$dec+1=", ($dec+1), "\n"; }
1
2
3
my $byte=substr($data,0,2);
my $test=sprintf "%02x", $byte;
&do_log("Received data: $test");
2012-11-24T10:04:09 montiIch habe die Daten nun allerdings in nem Skalar und nicht in nem Array.
Dachte kurz daran sie byteweise zu splitten
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
my @rawdata = (49, 70, 55, 54, 52, 49, 2, 28, 0, 9, 0); my $data = pack('C*', @rawdata); # transmission of packed data ... my @received = unpack('C*', $data); # Funktionierende Variante: print join('', map {sprintf('%02X', $_)} @received); # Versuch, den gepackten String zu splitten, um an die einzelnen # Elemente zu kommen: print "\n"; print join('', map {sprintf('%02X', $_)} split(//, $data)); # Es geht mit der Verwendung von ord(): print "\n"; print join('', map {sprintf('%02X', ord($_))} split(//, $data));