My first advice is: don't use any asynchronous APIs if a synchronous API is available. Yes, it will need blocking calls, but you place it in a separate thread. I think asynchronous APIs used to make some sense (still questionable) when threads were not a commonplace, but these days threads are much more straightforward way of doing things, more reliable and supportable.
I provided a sketch of network service architecture based on fixed number of threads, please see my past answers:
Multple clients from same port Number[
^],
automatic updater triggered via server[
^].
Networking can be done on few different levels. I provided my overview in these past answers:
how i can send byte[] to other pc[
^],
Communication b/w two Windows applications on LAN.[
^].
—SA