TCP Client Server ProgramProgram only crashes as release build — how to debug?My buffer contains elements, but aren't being printedC++ cout printing slowlyC++11 introduced a standardized memory model. What does it mean? And how is it going to affect C++ programming?C++ client and Java Server messageProgram not recieving messages on non-blocking UDP socketTCP server and multiple clients in C++ (windows)Why does the name get printed twice while printing the message?How to access array at the server end of tcp/ip socketDatagram socket server not receiving messages from client

Checking if argument is a floating point without breaking on control sequences in argument

Why we can't jump without bending our knees?

Scaling an object to change its key

Can you place a web spell on a surface you cannot see?

Probability Dilemma

Right indicator flash-frequency has increased and rear-right bulb is out

A medieval book with a redhead girl as a main character who allies with vampires and werewolves against scientific opposition

Is the infant mortality rate among African-American babies in Youngstown, Ohio greater than that of babies in Iran?

What is the precise meaning of "подсел на мак"?

Would a 7805 5v regulator drain a 9v battery?

Do battery electrons only move if there is a positive terminal at the end of the wire?

Why swap space doesn't get filesystem check at boot time?

How would Japanese people react to someone refusing to say “itadakimasu” for religious reasons?

Print the new site header

I just entered the USA without passport control at Atlanta airport

How "fast" do astronomical events occur?

How do I correctly reduce geometry on part of a mesh?

How do I become a better writer when I hate reading?

How to recover a single blank shot from a film camera

How can caller ID be faked?

Boundaries and Buddhism

Build a scale without computer

How did Frodo know where the Bree village was?

Fantasy game inventory — Ch. 5 Automate the Boring Stuff



TCP Client Server Program


Program only crashes as release build — how to debug?My buffer contains elements, but aren't being printedC++ cout printing slowlyC++11 introduced a standardized memory model. What does it mean? And how is it going to affect C++ programming?C++ client and Java Server messageProgram not recieving messages on non-blocking UDP socketTCP server and multiple clients in C++ (windows)Why does the name get printed twice while printing the message?How to access array at the server end of tcp/ip socketDatagram socket server not receiving messages from client






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








0















I am doing a programming assignment, and I have pretty much figured out the missing information from the skeleton code given, However, For the life of me I cannot figure out how to actually print the message recieved from the client!
int recv (int socket, char *buff, int buff_len,int flags)
I am using this filled in with the proper information, hopefully, to receive a message from the client. However I have no idea how to actually print it on the server!



I tried cout << buff; but that just seems to break the program.
I should also note I am doing this assignment in Putty.










share|improve this question




























    0















    I am doing a programming assignment, and I have pretty much figured out the missing information from the skeleton code given, However, For the life of me I cannot figure out how to actually print the message recieved from the client!
    int recv (int socket, char *buff, int buff_len,int flags)
    I am using this filled in with the proper information, hopefully, to receive a message from the client. However I have no idea how to actually print it on the server!



    I tried cout << buff; but that just seems to break the program.
    I should also note I am doing this assignment in Putty.










    share|improve this question
























      0












      0








      0








      I am doing a programming assignment, and I have pretty much figured out the missing information from the skeleton code given, However, For the life of me I cannot figure out how to actually print the message recieved from the client!
      int recv (int socket, char *buff, int buff_len,int flags)
      I am using this filled in with the proper information, hopefully, to receive a message from the client. However I have no idea how to actually print it on the server!



      I tried cout << buff; but that just seems to break the program.
      I should also note I am doing this assignment in Putty.










      share|improve this question














      I am doing a programming assignment, and I have pretty much figured out the missing information from the skeleton code given, However, For the life of me I cannot figure out how to actually print the message recieved from the client!
      int recv (int socket, char *buff, int buff_len,int flags)
      I am using this filled in with the proper information, hopefully, to receive a message from the client. However I have no idea how to actually print it on the server!



      I tried cout << buff; but that just seems to break the program.
      I should also note I am doing this assignment in Putty.







      c++






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Mar 25 at 4:58









      user1313410user1313410

      177




      177






















          1 Answer
          1






          active

          oldest

          votes


















          1














          You didn't show the actual code you are using to receive and print the message, but the most likely reason that cout << buff; is misbehaving is because it expects its argument to point to a 0-terminated char-array, and recv() does not 0-terminate the data it writes into your array. Because of that, the printing logic in the << operator will iterate past the end of the array looking for a 0-terminator-byte, and invoke undefined behavior.



          The simple way to avoid that problem is to add a 0-terminator byte yourself, like this:



           char buff[512];
          int numBytesReceived = recv(sockFD, buff, sizeof(buff)-1, 0);
          if (numBytesReceived > 0)

          buff[numBytesReceived] = ''; // place 0-terminator byte at end of received data
          cout << buff << endl; // now it's safe to print

          else if (numBytesReceived == 0) cout << "connection closed!" << endl;
          else perror("recv");





          share|improve this answer























          • Sorry I'm relatively new to C++, just took a basic class in it a long time ago. what exactly is a 0-terminated char-array? is it just an array with a as the last slot to tell cout to stop printing? Is there any other way to print it without all these extra steps? like printf,

            – user1313410
            Mar 25 at 5:21












          • Would i be able to shorten this by simply adding '/0' to the end of buf before I send it over to the server?

            – user1313410
            Mar 25 at 5:25











          • Also if i were to print out another array with cout, will it print out the entire array with no problems as long as i assign '' to the end

            – user1313410
            Mar 25 at 5:31






          • 1





            A 0-terminated array is just any char array with a '' char to mark the end of the valid chars; that is how C-style strings indicate the end of the string. You could send the '' char across the network from the server if you want, but it wouldn't work reliably, since there is no guarantee that all the chars you send will be received together in the same recv() call. Any array with a at the end should get printed without problems.

            – Jeremy Friesner
            Mar 25 at 6:27












          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55331469%2ftcp-client-server-program%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          You didn't show the actual code you are using to receive and print the message, but the most likely reason that cout << buff; is misbehaving is because it expects its argument to point to a 0-terminated char-array, and recv() does not 0-terminate the data it writes into your array. Because of that, the printing logic in the << operator will iterate past the end of the array looking for a 0-terminator-byte, and invoke undefined behavior.



          The simple way to avoid that problem is to add a 0-terminator byte yourself, like this:



           char buff[512];
          int numBytesReceived = recv(sockFD, buff, sizeof(buff)-1, 0);
          if (numBytesReceived > 0)

          buff[numBytesReceived] = ''; // place 0-terminator byte at end of received data
          cout << buff << endl; // now it's safe to print

          else if (numBytesReceived == 0) cout << "connection closed!" << endl;
          else perror("recv");





          share|improve this answer























          • Sorry I'm relatively new to C++, just took a basic class in it a long time ago. what exactly is a 0-terminated char-array? is it just an array with a as the last slot to tell cout to stop printing? Is there any other way to print it without all these extra steps? like printf,

            – user1313410
            Mar 25 at 5:21












          • Would i be able to shorten this by simply adding '/0' to the end of buf before I send it over to the server?

            – user1313410
            Mar 25 at 5:25











          • Also if i were to print out another array with cout, will it print out the entire array with no problems as long as i assign '' to the end

            – user1313410
            Mar 25 at 5:31






          • 1





            A 0-terminated array is just any char array with a '' char to mark the end of the valid chars; that is how C-style strings indicate the end of the string. You could send the '' char across the network from the server if you want, but it wouldn't work reliably, since there is no guarantee that all the chars you send will be received together in the same recv() call. Any array with a at the end should get printed without problems.

            – Jeremy Friesner
            Mar 25 at 6:27
















          1














          You didn't show the actual code you are using to receive and print the message, but the most likely reason that cout << buff; is misbehaving is because it expects its argument to point to a 0-terminated char-array, and recv() does not 0-terminate the data it writes into your array. Because of that, the printing logic in the << operator will iterate past the end of the array looking for a 0-terminator-byte, and invoke undefined behavior.



          The simple way to avoid that problem is to add a 0-terminator byte yourself, like this:



           char buff[512];
          int numBytesReceived = recv(sockFD, buff, sizeof(buff)-1, 0);
          if (numBytesReceived > 0)

          buff[numBytesReceived] = ''; // place 0-terminator byte at end of received data
          cout << buff << endl; // now it's safe to print

          else if (numBytesReceived == 0) cout << "connection closed!" << endl;
          else perror("recv");





          share|improve this answer























          • Sorry I'm relatively new to C++, just took a basic class in it a long time ago. what exactly is a 0-terminated char-array? is it just an array with a as the last slot to tell cout to stop printing? Is there any other way to print it without all these extra steps? like printf,

            – user1313410
            Mar 25 at 5:21












          • Would i be able to shorten this by simply adding '/0' to the end of buf before I send it over to the server?

            – user1313410
            Mar 25 at 5:25











          • Also if i were to print out another array with cout, will it print out the entire array with no problems as long as i assign '' to the end

            – user1313410
            Mar 25 at 5:31






          • 1





            A 0-terminated array is just any char array with a '' char to mark the end of the valid chars; that is how C-style strings indicate the end of the string. You could send the '' char across the network from the server if you want, but it wouldn't work reliably, since there is no guarantee that all the chars you send will be received together in the same recv() call. Any array with a at the end should get printed without problems.

            – Jeremy Friesner
            Mar 25 at 6:27














          1












          1








          1







          You didn't show the actual code you are using to receive and print the message, but the most likely reason that cout << buff; is misbehaving is because it expects its argument to point to a 0-terminated char-array, and recv() does not 0-terminate the data it writes into your array. Because of that, the printing logic in the << operator will iterate past the end of the array looking for a 0-terminator-byte, and invoke undefined behavior.



          The simple way to avoid that problem is to add a 0-terminator byte yourself, like this:



           char buff[512];
          int numBytesReceived = recv(sockFD, buff, sizeof(buff)-1, 0);
          if (numBytesReceived > 0)

          buff[numBytesReceived] = ''; // place 0-terminator byte at end of received data
          cout << buff << endl; // now it's safe to print

          else if (numBytesReceived == 0) cout << "connection closed!" << endl;
          else perror("recv");





          share|improve this answer













          You didn't show the actual code you are using to receive and print the message, but the most likely reason that cout << buff; is misbehaving is because it expects its argument to point to a 0-terminated char-array, and recv() does not 0-terminate the data it writes into your array. Because of that, the printing logic in the << operator will iterate past the end of the array looking for a 0-terminator-byte, and invoke undefined behavior.



          The simple way to avoid that problem is to add a 0-terminator byte yourself, like this:



           char buff[512];
          int numBytesReceived = recv(sockFD, buff, sizeof(buff)-1, 0);
          if (numBytesReceived > 0)

          buff[numBytesReceived] = ''; // place 0-terminator byte at end of received data
          cout << buff << endl; // now it's safe to print

          else if (numBytesReceived == 0) cout << "connection closed!" << endl;
          else perror("recv");






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Mar 25 at 5:06









          Jeremy FriesnerJeremy Friesner

          41.4k1182167




          41.4k1182167












          • Sorry I'm relatively new to C++, just took a basic class in it a long time ago. what exactly is a 0-terminated char-array? is it just an array with a as the last slot to tell cout to stop printing? Is there any other way to print it without all these extra steps? like printf,

            – user1313410
            Mar 25 at 5:21












          • Would i be able to shorten this by simply adding '/0' to the end of buf before I send it over to the server?

            – user1313410
            Mar 25 at 5:25











          • Also if i were to print out another array with cout, will it print out the entire array with no problems as long as i assign '' to the end

            – user1313410
            Mar 25 at 5:31






          • 1





            A 0-terminated array is just any char array with a '' char to mark the end of the valid chars; that is how C-style strings indicate the end of the string. You could send the '' char across the network from the server if you want, but it wouldn't work reliably, since there is no guarantee that all the chars you send will be received together in the same recv() call. Any array with a at the end should get printed without problems.

            – Jeremy Friesner
            Mar 25 at 6:27


















          • Sorry I'm relatively new to C++, just took a basic class in it a long time ago. what exactly is a 0-terminated char-array? is it just an array with a as the last slot to tell cout to stop printing? Is there any other way to print it without all these extra steps? like printf,

            – user1313410
            Mar 25 at 5:21












          • Would i be able to shorten this by simply adding '/0' to the end of buf before I send it over to the server?

            – user1313410
            Mar 25 at 5:25











          • Also if i were to print out another array with cout, will it print out the entire array with no problems as long as i assign '' to the end

            – user1313410
            Mar 25 at 5:31






          • 1





            A 0-terminated array is just any char array with a '' char to mark the end of the valid chars; that is how C-style strings indicate the end of the string. You could send the '' char across the network from the server if you want, but it wouldn't work reliably, since there is no guarantee that all the chars you send will be received together in the same recv() call. Any array with a at the end should get printed without problems.

            – Jeremy Friesner
            Mar 25 at 6:27

















          Sorry I'm relatively new to C++, just took a basic class in it a long time ago. what exactly is a 0-terminated char-array? is it just an array with a as the last slot to tell cout to stop printing? Is there any other way to print it without all these extra steps? like printf,

          – user1313410
          Mar 25 at 5:21






          Sorry I'm relatively new to C++, just took a basic class in it a long time ago. what exactly is a 0-terminated char-array? is it just an array with a as the last slot to tell cout to stop printing? Is there any other way to print it without all these extra steps? like printf,

          – user1313410
          Mar 25 at 5:21














          Would i be able to shorten this by simply adding '/0' to the end of buf before I send it over to the server?

          – user1313410
          Mar 25 at 5:25





          Would i be able to shorten this by simply adding '/0' to the end of buf before I send it over to the server?

          – user1313410
          Mar 25 at 5:25













          Also if i were to print out another array with cout, will it print out the entire array with no problems as long as i assign '' to the end

          – user1313410
          Mar 25 at 5:31





          Also if i were to print out another array with cout, will it print out the entire array with no problems as long as i assign '' to the end

          – user1313410
          Mar 25 at 5:31




          1




          1





          A 0-terminated array is just any char array with a '' char to mark the end of the valid chars; that is how C-style strings indicate the end of the string. You could send the '' char across the network from the server if you want, but it wouldn't work reliably, since there is no guarantee that all the chars you send will be received together in the same recv() call. Any array with a at the end should get printed without problems.

          – Jeremy Friesner
          Mar 25 at 6:27






          A 0-terminated array is just any char array with a '' char to mark the end of the valid chars; that is how C-style strings indicate the end of the string. You could send the '' char across the network from the server if you want, but it wouldn't work reliably, since there is no guarantee that all the chars you send will be received together in the same recv() call. Any array with a at the end should get printed without problems.

          – Jeremy Friesner
          Mar 25 at 6:27




















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55331469%2ftcp-client-server-program%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

          Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

          Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript