Ok, i shall try it out and let you know again. Thanks!
Main Topics
Browse All TopicsHi, I am currently developing a application that involves socket programming. Currently developing the server application on visual studio 6.0, and client application on embedded visual 3.0.
I did a socket connection between the server & client. As the server sends back information back to the client, it displays invalid charcters after the actual data (Eg. Apple*^@*^, Orange #&$($%@)
I suppose its the size, and I have to set a null at the end of the string. Is that so, could anyone guide me along on ways that I could solve this problem. Thank you.
This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.
Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.
If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.
Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.
Access the answers to your technology questions today.
30-day free trial. Register in 60 seconds.
Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Try it out and discover for yourself.
30-day free trial. Register in 60 seconds.
Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.
Hi mwcmp,
jkr has the right idea, but the code has a couple errors. you need to make sure you null terminate the buffer before the end of the buffer... so for a buffer of length 32 you only want to read 31 bytes, and then put the 0 terminator in the 31st position (since arrays are 0 based).
int bytesRecv = SOCKET_ERROR;
char recvbuf[32] = "";
while( bytesRecv == SOCKET_ERROR ) {
bytesRecv = recv( m_socket, recvbuf, 31, 0 );
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
// error
}
// zero-terminate string according to the amount of bytes received
recvbuf[bytesRecv] = 0;
good luck,
aaron
HI Friend,
i dont know what are using , I wanna ask are u making the client/server socket architecture in MFC based classes like CSocket or CAsyncSocket or are using raw Socket Api's
if you are using the raw Api like this
int recv(
SOCKET s,
char FAR *buf,
int len,
int flags
);
the total byte of data recv is returned by the above function
and you create the string like that
char buffer[1000];
int iRec=recv(hSocket,buffer,9
buffer[iRec]=NULL;
is the required string by you
Now in MFC
int Receive( void* lpBuf, int nBufLen, int nFlags = 0 );
it s same functionality
i think it will help
int bytesRecv = SOCKET_ERROR;
char recvbuf[32] = "";
SOCKET AcceptSocket;
// Receive data to the server
while (1)
{
AcceptSocket = SOCKET_ERROR;
while ( AcceptSocket == SOCKET_ERROR )
{
AcceptSocket = accept( m_socket, NULL, NULL );
}
tmp_socket = m_socket;
m_socket = AcceptSocket;
break;
}
That's my current codes, how should i change to remove those invalid characters?
Well you aren't actually receiving any characters with that code. After you accept the socket you need to do a recv to get characters.
After your while loop... add the following code to continually receive characters.
char buffer[1024];
while(true)
{
bytesRecv = recv(AcceptSocket, buffer, 1023, 0);
if(bytesRecv==0)
{
//Connection closed
break;
}
else
if(bytesRecv<0)
{
//Connection failed
break;
}
buffer[bytesRecv]=0;
printf("Your characters received are = %s",buffer);
}
Business Accounts
Answer for Membership
by: jkrPosted on 2004-09-21 at 11:29:46ID: 12115297
If you receive data like
int bytesRecv = SOCKET_ERROR;
char recvbuf[32] = "";
while( bytesRecv == SOCKET_ERROR ) {
bytesRecv = recv( m_socket, recvbuf, 32, 0 );
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
// error
}
// zero-terminate string according to the amount of bytes received
recvbuf[bytesRecv + 1] = 0;
the last line will correctly zero-terminate the string.