Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Socket Newbie (perl newbie, too...)

by btrott (Parson)
on Jun 18, 2001 at 22:29 UTC ( #89392=note: print w/replies, xml ) Need Help??

in reply to Socket Newbie (perl newbie, too...)

I think you're misunderstanding the packet format. When you say that the representation is in "binary", it doesn't mean the binary representation that you get by doing unpack "B*"; it means that your data is packed as if it's in a binary structure. So you have the right operator (pack), you just have the wrong pack template.

I think that this will work for you:

my $data = "LOGON USERNAME=NAME PASSWORD=PASS\0"; my $packet = pack "CnCCNnn", 2, ## sync byte length($data)+13, ## message size 13, ## header size hex("4c"), ## message type 1, ## sequence ID 0, ## protocol ID 1; ## version number $packet .= $data;
That pack template ("CnCCNnn") says to pack the list of values (the rest of the arguments to pack) in the following way:
  • unsigned char value (1 byte)
  • short in network order (2 bytes)
  • unsigned char value (1 byte)
  • unsigned char value (1 byte)
  • long in network order (4 bytes)
  • short in network order (2 bytes)
  • short in network order (2 bytes)
This varies from your use of pack in two important ways. First, we no longer use 'unpack "B*"', because the point of that is to take a binary structure and make it into a human-readable string that looks like a sequence of bits. That's not what you want: you want to send the data to the server as a binary structure.

Second, you can't just use 'pack "N"'; that packs everything as a network-order long, which is 4 bytes. You don't want everything to be 4 bytes; some things are 1 byte, some are 2, some are 4. You have to vary you pack template depending on that.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://89392]
[Corion]: marto: Well, I think they go a tour every two years and I think it's hard to even get a connection with the crowd at a 20k people concert... But maybe after this time I'll stop too ;)
[Corion]: I still have to see the Pet Shop Boys live before they stop touring at all
[marto]: yeah, I think that as a group creatively they're done. I can understand how it'd be hard to stop the process, album/tour, album/tour, if that's pretty much all you've ever done :)
[marto]: Corion yes I saw them Pandemonium_Tour
[Corion]: marto: Yeah, and I doubt that they'll ever get back to something like Violator/Songs of Faith and Devotion - it would either alienate their "regular" crowd, or be "too much Violator" ;)
LanX needs to see Freddy Mercury'
[Corion]: marto: Yeah, I have that on DVD even, and I missed them last year because I was in London at the time ironically ;)
[marto]: put me in the mood to listen to this now :)
[Corion]: LanX: Well, grab a shovel :)
[Corion]: Kraftwerk also are still touring (well, only Ralf Hütter and Florian Schneider), but I'm too tight fisted to spend EUR 150+ for standing around two hours ;)

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (10)
As of 2017-03-24 11:44 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (301 votes). Check out past polls.