Pour l'utilisation de grands nombre tu peux utiliser le type
du coup t'auras plus trop besoin d'utiliser une librairie pour ca.
Pour ce qui est des fonctions mathématiques tu peux plutot t'orienter vers un dev en Java plutot qu'en C++ même si en C++ c'est tout a fait faisable mais un peu plus compliqué à mon sens
Pour l'appli client-serveur, tu as deux solutions :
- Soit tu restes sur Windows et tu utilises Winsocks, il y a de très bonne docs sur internet la dessus. Il s'agit d'une bibliothèque de DLL permettant d'implémenter des sockets (une socket est la base de toutes les communications clients serveurs IP). Tu trouveras toute la doc dans la MSDN de microsoft à l'adresse suivante : http://msdn.microsoft.com/en-us/library
S.85).aspx. C'est en anglais mais bon vu que tu es aux US ca devrait pas te poser plus de problèmes que ca 
- Soit tu passes sur Linux et la c'est le bonheur ^^ Tu n'as rien à installer du tout car tout est pris nativement en charge par le kernel. Cependant ce n'est peut être pas la meilleure solution pour toi si d'une part tu n'as pas Linux et que tu as déja commencé à développer sur Windows.
Quoiqu'il en soit que tu utilises Winsocks ou les sockets linux le principe d'une socket en mode connecté TCP ou non connecté UDP reste le même, je te fait un bref topo d'une socket en mode connecté (TCP) :
Serveur
- Création d'une socket (retourne un descripteur de fichiers sous Linux et un objet SOCKET sous Windows)
- Liaison de la socket (liaison entre la socket et une structure de données coté serveur modifiée lors de l'échange de données)
- Ecoute sur un port
- Attente de demandes de connexions (bloquant sur le serveur tant qu'aucun client ne fait de demande de connexions, retourne un nouveau descripteur de fichiers sur linux et une nouvelle structure SOCKET sur Windows sur laquelle se fera tous les échanges)
- Lecture/Ecriture de données
Client
- Création d'une socket
- Bind de la socket
- Connexion au serveur sur un port sur lequel le serveur écoute
- Ecriture/Lecture de données une fois la connexion acceptée par le serveur
Pour une socket en UDP (mode non connecté) la seule différence est que c'est non fiable c'est à dire qu'il n'y a pas de retransmission de données si c'est perdu, pas d'accusé de réception, et l'identification client serveur se fait explicitement (pas de routine d'acceptation de connexions mais plutot création d'une structure de données client et une structure de données serveur permettant de les identifier donc pas de risques que la connexion soit frauduleuse en théorie bien sur ^^).
Pour ton cas tu peux utiliser soit le mode connecté (TCP) ou le mode non-connecté (UDP) sachant que pour ce genre d'appli si elle reste en local elle n'a pas besoin d'une connexion fiable en TCP enfin ca c'est a toi de choisir :p
Eventuellement je pourrais t'envoyer quelques unes de mes sources sur les sockets mais ce sera uniquement des sockets UNIX pas Windows
si tu en as besoin 