/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
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

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409075
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste