Winsock Recv/Send problem

I've been having one hell of a problem with a program I'm making.  Basically, it's inter-process communication using sockets. I've done sockets for years, and just recently started running into this roadblock that I can't figure out.  I've gotten it to connect to the "server" (which is just another program running a bind on, but when we exchange information, I've used a set of MessageBox's to show me the data going between the two.  The MessageBox's hault program execution until user input, but from what I understand, messages are supposed to queue up, right? Anyways, this is what I'm getting (an example conversation):

-Connect to localhost-


server SEND: 2,FLUSH


You'll notice that my client is recv'ing but it almost looks like the buffer/recv queue I'm using isn't being flushed properly and it has remnants of previous packets in it.

Maybe it has something to do with my methodology? I'm using a while() loop on a non-blocking socket inside of a different thread in my GUI, and skipping past anything with a WSAEWOULDBLOCK error to recieve everything.  I hope the experts aren't laughing at me at this point :P

Here's the strange part...I'm doing EVERYTHING I can to zero this buffer out though..during every loop iteration, I set my buffer's 0 index to 0x00 like so:
recvBuff[0] = 0x00;
Which should set the string to null (just to make sure I'm not overwiting what I had)..from the server side, I used a MessageBox to show me what the server was sending, and it IS sending properly formatted packets, so I know the problem is on my client end...I even tried taking the recvBuff upon a successful recv call and doing a strncpy into a NEW buffer based on the size of data receieved like so:

lResult = recv(socket,recvBuff,512,0);
if(lResult > 0)

It probably has a whole lot to do with my loop, but I can't for the LIFE of me figure out why my buffer isn't clearing/why my socket recv data is all mashing together.

OH I FORGOT -- If I put a message box after the recv call showing the AMOUNT of data I received like so:

sprintf(buffer,"%i -- Number of bytes recvd",lResult);

Then it actually shows me the correct number AND parses correctly..but only if that message box is there. Is it a speed issue? What the hell is going on?? lol

Any help at all would be GREATLY appreciated...and if you can think of a better way to do winsock in C++ (I'm using MingW via Ultimate++), perhaps async sockets or something, PLEASE let me know. I'm about to smash my computer due to this lol :P

Who is Participating?
BigRatConnect With a Mentor Commented:
>> I'm using isn't being flushed properly and it has remnants of previous packets in it.

Which looks as if you're treating the socket connection as a packet sending/receiving system.

>> I've done sockets for years

Which suggests that you know that the system is a stream system.

Could you be a little more specific on what "client SEND: 1,COMMAND,1,ARGS,HERE" is?

In particular what exactly contitues a "packet"?
George TokasCommented:
With C++ Builder implementation is easy...
What compiler are you using??

George Tokas.
ProjectZIGAuthor Commented:
I'm using MinGW 32 and the Ultimate++ development environment.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.