Send a byte or whole text

This is a discussion on Send a byte or whole text within the Networking/Device Communication forums, part of the General Programming Boards category; Is there any preference when sending data as to send it byte by byte or sending a whole buffer (the ...

  1. #1
    Registered User
    Join Date
    Dec 2007
    Location
    At home.
    Posts
    651

    Send a byte or whole text

    Is there any preference when sending data as to send it byte by byte or sending
    a whole buffer (the whole file) at once?

    Is the latter faster than the former for example?
    Using Code::Blocks with MSVC++ 2010.

  2. #2
    and the hat of mystery Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    31,338
    You can pass as many bytes as you like to send(), but you'd better pay attention to the return result.

    If it's less than the amount you asked to be sent, then you need to call send() again, from the point where the previous attempt left off.

    A bit like this.
    Code:
    size_t num_to_send;
    char *buff;
    while ( num_to_send ) {
      int num_sent = send( sock, buff, num_to_send, 0 );
      if ( num_sent > 0 ) {
        num_to_send -= num_sent;
        buff += num_sent;
      }
    }
    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
    int x = *((int *) NULL); Cactus_Hugger's Avatar
    Join Date
    Jul 2003
    Location
    Banks of the River Styx
    Posts
    903
    In addition to what Salem said: send as much as you have available to send, but obviously try to keep the size of what you must send small (if you have control over the protocol/its contents) - ie, a PNG or a GIF is better than a BMP.
    recv as much as you can recv.
    long time; /* know C? */
    Unprecedented performance: Nothing ever ran this slow before.
    Any sufficiently advanced bug is indistinguishable from a feature.
    Real Programmers confuse Halloween and Christmas, because dec 25 == oct 31.
    The best way to accelerate an IBM is at 9.8 m/s/s.
    recursion (re - cur' - zhun) n. 1. (see recursion)

  4. #4
    Registered User
    Join Date
    Dec 2007
    Location
    At home.
    Posts
    651
    Thank you Salem and Cactus_Hugger!

    I see you use a char *buff; in your code.

    Does it matter as to which one of the 3 we use?

    Code:
    char *buffer;
    char  buffer[256];
    char *buffer = new char[256];
    Last edited by Ducky; 08-09-2009 at 05:31 AM.
    Using Code::Blocks with MSVC++ 2010.

  5. #5
    and the hat of mystery Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    31,338
    So long as it's allocated, no.
    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.

  6. #6
    Registered User
    Join Date
    Dec 2007
    Location
    At home.
    Posts
    651
    May i ask whats the point of this line in your code Salem?
    Code:
    buff += num_sent;
    I suppose its for decreasing the length of buff.

    But if i do a test like this, i get completely random values for buf:

    Code:
    #include <iostream>
    
    using namespace std;
    
    int  main()
    {
       int i = 0;
       char * buf = new char[i];
       while(i<15)
       {
            buf  += i;
            i++;
            cout << strlen(buf) <<"\n";
       }
    
       delete [] buf;
    
       return  0;
    }
    Using Code::Blocks with MSVC++ 2010.

  7. #7
    and the hat of mystery Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    31,338
    > buff += num_sent;
    If you've got a buffer of 100 bytes, and send 10, that means you've got 90 left (that's what the -= is for).
    It also means that you need to try the next send from 10 bytes into the buffer (that's what the += is for).
    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.

  8. #8
    Registered User
    Join Date
    Dec 2007
    Location
    At home.
    Posts
    651
    Ah, ok thanks!
    Using Code::Blocks with MSVC++ 2010.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. DirectX | Drawing text
    By gavra in forum Game Programming
    Replies: 4
    Last Post: 06-08-2009, 12:23 AM
  2. How to use FTP?
    By maxorator in forum C++ Programming
    Replies: 8
    Last Post: 11-04-2005, 02:17 PM
  3. Removing text between /* */ in a file
    By 0rion in forum C Programming
    Replies: 2
    Last Post: 04-05-2004, 08:54 AM
  4. LISP (DrScheme) any one?
    By Jeremy G in forum A Brief History of Cprogramming.com
    Replies: 5
    Last Post: 03-31-2004, 11:52 AM
  5. Ok, Structs, I need help I am not familiar with them
    By incognito in forum C++ Programming
    Replies: 7
    Last Post: 06-29-2002, 09:45 PM

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