packing a message

This is a discussion on packing a message within the Networking/Device Communication forums, part of the General Programming Boards category; hi I've been reading some tutorials on packing a message before sending it to the server..and I haven't been doing ...

  1. #1
    Registered User
    Join Date
    Feb 2005
    Posts
    30

    packing a message

    hi

    I've been reading some tutorials on packing a message before sending it to the server..and I haven't been doing very well..

    I have here an example of a message being packed can someone explain the few lines that use hexadecimals?

    Code:
         unsigned char buffer [100];
         int id, i=0, type;
         char data [1024];
    
    
          printf ("\nEnter an id number:");
          scanf("%d", &id);
    
          printf ("\nEnter a type between <3 :");
          scanf("%d", &type);
    
           printf ("\nEnter a message of 50 characters at max:");
           scanf("%s", data);
    
           int length = strlen(message);
           
           //pack the id number
           buffer[i++] = (unsigned char)((id & 0xff000000) >> 24);
           buffer[i++] = (unsigned char)((id & 0xff0000) >> 16);
           buffer[i++] = (unsigned char)((id & 0xff00) >> 8);
           buffer[i++] = (unsigned char)(id & 0xff);
    
           //pack the type
           buffer[i] = (unsigned char)(type & 0x03);
           buffer[i] = buffer[i]<<6;
    
           //pack the length
           buffer[i] = buffer[i] | (length & 0x0000003F);
    
            i++;
           //pack the data
            memcpy(&buffer[i], &data[0], length);
           i = i+length;
    thanks

  2. #2
    and the hat of wrongness Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    32,533
    id is a 4-byte number, and what it is doing is extracting each byte from the id.
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.
    I support http://www.ukip.org/ as the first necessary step to a free Europe.

  3. #3
    Registered User
    Join Date
    Feb 2005
    Posts
    30
    I solved my pcking problems but it seems that when I'm trying to send a large number of bytes say 50KB I'm loosing part of the data...

  4. #4
    and the hat of wrongness Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    32,533
    > I'm trying to send a large number of bytes say 50KB I'm loosing part of the data...
    Since your output buffer is only 100 bytes, I'm not surprised something else isn't happening as well.
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.
    I support http://www.ukip.org/ as the first necessary step to a free Europe.

  5. #5
    Registered User
    Join Date
    Feb 2005
    Posts
    30
    no the size of the buffer is not the issue here...(my buffer is of size 65000)...
    when the message is long you might loose some bytes while sending it...actualy you don't loose them, they are still in the buffer but were not read for some reason...
    anyway I found a solution for this problem...
    here is the function if that might interest you:

    Code:
    int sendall(int s, char *buf, int len)
    {
    	//when we send a message to the server (or client) the bytes in the message might not be all sent
    	//this methos makes sure all bytes were sent
    
    	int total = 0; // total number of bytes we're sending
    	int bytesleft = len; // how many we have left to send
    
    	int n;
    
    	while(total < len) 
    	{
    		n = send(s, buf+total, bytesleft, 0);
    		if (n == -1) 
    		{ 
    			break; 
    		}
    
    		total += n;
    		bytesleft -= n;
    	}//end while
    	
    	//return -1 on failure
    	//return 1 in case of success
    
    	if(n >= 0)
    			return 1;
    	else
    		return -1;
    
    }
    anyway thanks salem

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Strange string behavior
    By jcafaro10 in forum C Programming
    Replies: 2
    Last Post: 04-07-2009, 07:38 PM
  2. Global Variables
    By Taka in forum C Programming
    Replies: 34
    Last Post: 11-02-2007, 03:25 AM
  3. Message class ** Need help befor 12am tonight**
    By TransformedBG in forum C++ Programming
    Replies: 1
    Last Post: 11-29-2006, 10:03 PM
  4. Dialog Box Problems
    By Morgul in forum Windows Programming
    Replies: 21
    Last Post: 05-31-2005, 05:48 PM
  5. Tab Controls - API
    By -KEN- in forum Windows Programming
    Replies: 7
    Last Post: 06-02-2002, 09:44 AM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21