Bon voici une librairie très utile et très simple d'utilisation pour des socket TCP multi-thread voici un petit exemple
Pour l'utiliser vous avez besien de mk_socket.a et mk_socket.h pour faire une version VS il faut la recompiler.
voici un exemple de server:
#include <iostream>
#include "mk_socket.h"
//Cette fonction est appelée par le socket lorsque qu'un autre socket se connecte au serveur.
void on_connection_request(mk_socket& sck,void* data)
;
// mk_socket est une réference vers le socket en utilisation
// data est un pointeur vers une donnée envoyer pour l'utiliser n'oublier pas de le caster
//Cette fonction est appelé lorsque des données arrive du réseau. La fonction ne fait qu'imprimer ce texte à l'écran.
void on_data_arrival(mk_socket& sck, char* str, int size, void* data);
// mk_socket est une réference vers le socket en utilisation
// str est la chaine de caractère ressu
// size est la taille de str
// data est un pointeur vers une donnée envoyer pour l'utiliser n'oublier pas de le caster
int main()
{
mk_socket sock //création du mk socket
// Affecte les fonction callback de connection et de reception de donnée
// Le NULL peux être remplacé par une adresse mémoire ressue par l'attribut 'data'(voir plus haut)
sock.SetConnectionRequestCallBack(on_connection_request, NULL);
sock.SetDataArrivalCallBack(on_data_arrival, NULL);
int port;
std::cout << "port ?" << std::endl;
std::cin >> port;
//Écoute sur le port
sock.Listen(port);
//On attend que la connection se ferme et que le socket n'écoute plus.
sock..WaitClose();
return EXIT_SUCCESS;
};
void on_connection_request(mk_socket& sck,void* data)
{
//On accepte la connexion, et on utilise pour celà le socket qui écoutait précédemment. De toute manière, on n'attend plus d'autre connexions.
//Attention garder le si vous vouler écouter encore sur votre port
sck.Accept(sck);
while(1) //n'arrête pas deboucler
{
char texte [100];
std::cin >> texte;
sck.Send(texte);
}
};
void on_data_arrival(mk_socket& sck, char* str, int size, void* data)
{
std::cout << str << endl; //Écrit le texte reçu
return;
};