Как я могу изменить полученные сообщения сокета в Perl? - PullRequest
2 голосов
/ 09 марта 2009

Я пишу Perl-программу, которая отправляет и получает сообщения от двух сокетов и действует как коммутатор. Я должен изменить полученные сообщения, полученные из одного сокета, добавить 3 байта к данным и, наконец, отправить измененные сообщения в другой сокет. Я использую механизм select () ... sysread () ... syswrite () для опроса сообщений между сокетами. Полученные сообщения сохраняются в буфере $ во время модификации.

Теперь я могу использовать следующий способ получения полученных сообщений:

my $hexmsg = unpack("H*", $buffer);
my @msg = ( $hexmsg =~ m/../g );

тогда я могу вставить 3 байта в @msg. Однако я не знаю, как упаковать сообщение в @msg в скаляр (например, $ buffer) и отправить его в другой сокет с помощью syswrite (). Кто-нибудь может мне помочь? Заранее спасибо!

Кстати, сообщения в двоичном буфере $?

Ответы [ 2 ]

3 голосов
/ 09 марта 2009

Да, сообщения в $ buffer являются двоичными (если я правильно понимаю, что вы подразумеваете под этим). Если ваша единственная причина распаковать его в @msg - это вставить байты, не делайте этого. Вместо этого используйте substr и просто запишите измененный буфер $. Например:

substr( $buffer, 0, 0, "\x01\x02\x03" ); # insert 3 bytes at beginning.

Если вы делаете другие вещи с @msg, вы можете продолжать использовать это, а также делать вставку substr перед записью, или вы можете использовать substr, pack или split или vec или regex, чтобы разобрать нужные вам части. Вам нужно будет описать то, что вы делают, чтобы получить более конкретную помощь.

1 голос
/ 09 марта 2009

Если вы использовали unpack для получения данных от $buffer, пытались ли вы использовать pack, чтобы вернуть туда данные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...