TCP is often prioritized over UDP traffic. If you can build a simple reliable protocol over UDP, it'll be easier in the long run, especially with NAT negotiation, and not having to deal with multiple sockets.
Building a reliable in-order messaging system on top of UDP isn't that hard, and you can keep it simple, if you don't care about latency (your messages arriving a few fraction of a second later). And in general, you will already have some sort of protocol to establish and maintain connectivity with your clients, which would roughly mimic a TCP-IP state machine.
dont use sprintf, it's unsafe. use sprintf_s, or whatever the bound checked version is.
As for your problem, I can't say at a glance. Looks like you'll have to get better at debugging. Print out what data goes out, what data comes in, into the console, or a file, put breakpoints, and just step through the code.
Finally, I would refrain from using that sort of verbose format, and use some form of binary serialisation, or some other library that will give you the opportunity to format, and parse text strings more efficiently.
Or if you want some readable packet, for debugging, 'tokenise' the string. Much easier to digest on the other end.