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 127.0.0.1), 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: 0,CONNECTED
client RECV: 0,CONNECTED_TO_SERVER
client SEND: 1,COMMAND,1,ARGS,HERE
server RECV: 1,COMMAND,1,ARGS,HERE
server SEND: 2,FLUSH
client RECV: 2,FLUSHCTED_TO_SERVER
-----
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)
{
strncpy(buff2,recvBuff,lRe
sult);
..etc..
}
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);
MessageBox(0,buffer,"Recv"
,0);
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
-Kevin