Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

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.


Comment on Re: Socket Newbie (perl newbie, too...)
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://89392]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (10)
As of 2015-07-07 20:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (93 votes), past polls