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

          How to preserve electronics (computers, tablets and phones) for hundreds of years Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) The network's official Twitter account is up and running again. What content…How might modern humans leave a message for 50,000 years?How would an aquatic race develop computers?How do we make computers care for human life?Keeping supplies for 1000 yearsWhat will cell phones become in 100 years?What body armor protects against a laser?Could a society attain 1800s technology if limited to using copper and bronze?Electricity power (magic) and electronicsScavenging metal resources in post-apocalypse after 100 yearsWhy would precursors create devices that can survive and still work after hundreds of years?

          155 수학 과학 기타 둘러보기 메뉴eh추가해eh문서를 완성해

          Convert JSON to MapSimplest way to convert a string representing JSON array into Java array List of key value pairsHow to take String JSON values into HashMapConvert a JSON String to a HashMapCreating BSON object from JSON stringJSONObject - How to get a value ?Better Map ConstructorReading JSON from Url javaUpdate columns if input values are not null otherwise ignore and keep the existing values of column in databaseHow to store object represented as Json string into Couchbase Lite?Go JSON into MapHow do I efficiently iterate over each entry in a Java Map?Sort a Map<Key, Value> by valuesHow to round a number to n decimal places in JavaCan comments be used in JSON?How do I read / convert an InputStream into a String in Java?How can I pretty-print JSON in a shell script?What is the correct JSON content type?How can I deserialize JSON to a simple Dictionary<string,string> in ASP.NET?Why does Google prepend while(1); to their JSON responses?Parse JSON in JavaScript?