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;
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++
add a comment |
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++
add a comment |
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++
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++
c++
asked Mar 25 at 4:58
user1313410user1313410
177
177
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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");
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 samerecv()
call. Any array with aat the end should get printed without problems.
– Jeremy Friesner
Mar 25 at 6:27
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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");
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 samerecv()
call. Any array with aat the end should get printed without problems.
– Jeremy Friesner
Mar 25 at 6:27
add a comment |
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");
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 samerecv()
call. Any array with aat the end should get printed without problems.
– Jeremy Friesner
Mar 25 at 6:27
add a comment |
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");
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");
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 samerecv()
call. Any array with aat the end should get printed without problems.
– Jeremy Friesner
Mar 25 at 6:27
add a comment |
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 samerecv()
call. Any array with aat 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
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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