|
| bygning af frame til socket. Fra : DeepBlur |
Dato : 29-10-01 11:47 |
|
Hej NG.
Jeg roder lidt med sockets, og er ved at bygge en frame. mit spørgsmål er
så!
Hvordan gør man det?
Jeg bygger frame'en ud fra hex koderne. (ff ff ff ff 69 6e 66 6f 73 74 72 69
6e 67 0a 00) , som så skal sendes.
har prøvet følgende:
$sock = IO::Socket::INET->new(
PeerAddr => '172.16.97.2',
PeerPort => '26016',
Type => SOCK_DGRAM,
Proto => 'udp')
or
die "! can't open socket\n";
print $sock 0xff . 0xff . 0xff . 0xff . 0x69 . 0x6e . 0x66 . 0x6f . 0x73 .
0x74 . 0x72 . 0x69 . 0x6e . 0x67 . 0x0a . 0x00;
Men Perl syntes åbenbart at hex koderne skal konverteres til text inden at
de bliver sendt. hvilket resultere i, at modtageren ikke forstår beskeden.
Er der nogen der kan hjælpe mig med det?
MVH Deepblur
| |
Peter Makholm (29-10-2001)
| Kommentar Fra : Peter Makholm |
Dato : 29-10-01 11:58 |
|
"DeepBlur" <suber_20@hotmail.com> writes:
> print $sock 0xff . 0xff . 0xff . 0xff . 0x69 . 0x6e . 0x66 . 0x6f . 0x73 .
> 0x74 . 0x72 . 0x69 . 0x6e . 0x67 . 0x0a . 0x00;
Læs "perldoc -f pack".
print $sock pack("n*", 0xff, 0xff, 0xff, 0x69, 0x6e, [...], 0x00);
--
Når folk spørger mig, om jeg er nørd, bliver jeg altid ilde til mode
og svarer lidt undskyldende: "Nej, jeg bruger RedHat".
-- Allan Olesen på dk.edb.system.unix
| |
Lasse Hillerøe Peter~ (29-10-2001)
| Kommentar Fra : Lasse Hillerøe Peter~ |
Dato : 29-10-01 12:28 |
|
In article <1saD7.47$RM3.4408@news000.worldonline.dk>, "DeepBlur"
<suber_20@hotmail.com> wrote:
>print $sock 0xff . 0xff . 0xff . 0xff . 0x69 . 0x6e . 0x66 . 0x6f . 0x73 .
>0x74 . 0x72 . 0x69 . 0x6e . 0x67 . 0x0a . 0x00;
>
>Men Perl syntes åbenbart at hex koderne skal konverteres til text inden at
>de bliver sendt. hvilket resultere i, at modtageren ikke forstår beskeden.
>
>Er der nogen der kan hjælpe mig med det?
0xff er det samme som 255, blot med en anden skrivemåde. .-operatoren
konkatenerer strenge, og konverterer derfor numeriske argumenter til
strenge - decimalt - inden konkatenering.
I stedet kunne du erstatte 0xff med chr(0xff) for explicit at lave en
streng der er som du ønsker den. Men det ville nok være en hel del
smartere at læse perldoc -f pack:
print $sock pack("H*",q(ffffffff696e666f737472696e670a00));
Hvis det er klartekst kunne du selvfølgelig lige så godt skrive:
print $sock "\xff\xff\xff\xffinfostring\n\x00";
og så glemme alt om pack.
Men pack kan også lave alle mulige stunts med padding osv.
-Lasse
| |
|
|