Я пытаюсь отправить двоичный файл через сокет UDP в Perl:Perl: Чтение двоичного файла и отправить через гнездо
#!/usr/bin/perl
use warnings;
use strict;
use IO::Socket;
my $sock = IO::Socket::INET->new(
Proto => 'udp',
PeerPort => 666,
PeerAddr => '127.0.0.1',
) or die "Could not create socket: $!\n";
my $input;
open $input, "result1.bin" or die "Unable to oen: $!";
binmode $input;
my $data;
my $nbytes;
while($nbytes = read $input, $data, 32) {
print "$nbytes bytes read\n";
}
my $res = $sock->send($data);
print $res . "\n";
Мой выход:
32 bytes read
32 bytes read
16 bytes read
0
Почему вызов отправить не отправить байт?
Вы распечатали '$ data' внутри и после вашего цикла, чтобы проверить, что было прочитано? – simbabque
@ago, да. Я напечатал $ data after loop через print hexdump ({"data" => $ data}); В результате получилось: _Data :: Hexdumper: длина данных не является целым числом, кратным строкам , поэтому в конце было заполнено NULL. 0x0000: 48 41 53 48 28 30 78 31 35 37 63 34 34 30 29 00: HASH (0x157c440) _ – peroksid
Если я изменяю $ data на «что-то строку или число», это работает. Очень странно. – peroksid