You have probably realised that you are starting to go around in circles. Wireshark uses pcap
https://en.wikipedia.org/wiki/Pcap[
^] which is a very low level packet sniffing API. It accesses the hardware directly and bypasses the TCP stack altogether. This makes it useful for diagnosing network traffic and network hardware. If your are on Windows it is WinPcap
http://www.winpcap.org/[
^]
In your case it is able to confirm packets are arriving. Is it more robust than XYZ. No. It is a specific tool and once you know the network is working who cares.
When you added threads to your program probably the best thing you could have added was moving from UDP to TCP. This gives you guarantees, retransmits, handshaking etc. If you then added your own packet IDs and maybe checksums you would not only be getting closer to a reliable system but also have some means of verification.
Whether to use TCP or UDP would have to be based on proper analysis but generally the use of UDP means that you are prepared for lost packets. If lost data is an issue then TCP is the way.
It would however still be down to you to get it all working and that can also be a challenge.