Bubsockcpp.h: objet socket très simple d'utilisation

Description

bubsockcpp.h est une adaptation de bubsock.h mais en class ce qui permet grace au principe de l'héritage soit de l'adapter a vos objets déjà créés, soit de l'utiliser comme vous le sentez (par exemple pour récupérer des donnée binaire en surchargeant la fonction CLIENTRECV).

voici l'exemple d'un serveur et d'un client simple:

Source / Exemple :


////////////////////////////////////////////////////////////
// CLIENT: Client utilisé avec bubsockcpp.h
////////////////////////////////////////////////////////////

#include <stdiostr.h>
#include "..\bubsockcpp.h"

class SOCKCLIENT : public BUBSOCK
{
	void SOCKREAD(SOCKET,char*);
	void SOCKCLOSE(SOCKET);
};

void SOCKCLIENT::SOCKREAD(SOCKET _Client,char* chaine)
{
	printf("Serveur: %s",chaine);
}

void SOCKCLIENT::SOCKCLOSE(SOCKET _Client)
{
	cout << "Le serveur a ete deconnecte" << endl;
	exit(0);
}

SOCKET Client;

int main()
{
	SOCKCLIENT bub;

	if (bub.sockopen(&Client,"127.0.0.1",23) != 0)
	{
		cout << "Connexion impossible" << endl;
		exit(0);
	}
    cout << "Vous etes connecte" << endl;
    while(1) 
	{
		char chaine[0xFF];
		int c = 0;
		do
		{

			chaine[c++] = getc(stdin);
			chaine[c] = '\0';
			if (!strcmp(chaine,"exit"))
			{
				bub.sockclose(Client);
				exit(0);
			}

		} while (chaine[c-1] != '\n');
		bub.sockwrite(Client,chaine);
    }
    return 0;
}

_______________________________________________________________

////////////////////////////////////////////////////////////
// SERVEUR: Serveur utilisé avec bubsockcpp.h
////////////////////////////////////////////////////////////

#include <stdiostr.h>
#include "..\bubsockcpp.h"

SOCKET Client = INVALID_SOCKET;
SOCKET Serv;

class SOCKSERV : public BUBSOCK
{
	void SOCKLISTEN(SOCKET);
	void SOCKREAD(SOCKET,char*);
	void SOCKCLOSE(SOCKET);
};

void SOCKSERV::SOCKLISTEN(SOCKET _Client)
{
	if (Client == INVALID_SOCKET)
	{
		printf("Un client est arrivé\n");
		Client = _Client;
	}
	else sockclose(_Client);
}

void SOCKSERV::SOCKREAD(SOCKET _Client,char* chaine)
{
	printf("Client: %s",chaine);
}

void SOCKSERV::SOCKCLOSE(SOCKET _Client)
{
	if (_Client == Client)
	{
		printf("Le client s'est deconnecte\n");
		exit(0);
	}
}

int main(int argc, char* argv[])
{
	SOCKSERV serveur;
	if (serveur.socklisten(&Serv,23) != 0)
	{
		printf("Connexion impossible du serveur.\n");
		exit(0);
	}

    printf("Serveur pret\n");
    while(1) 
	{
		char chaine[0xFF];
		int c = 0;
		do
		{
			chaine[c++] = getc(stdin);
			chaine[c] = '\0';
			if (!strcmp(chaine,"exit"))
			{
				if (Client != INVALID_SOCKET) serveur.sockclose(Client);
				exit(0);
			}

		} while (chaine[c-1] != '\n');
		if (Client != INVALID_SOCKET) serveur.sockwrite(Client,chaine);
    }
    return 0;
}

Conclusion :


Laisser suggestions, appréciations et notes svp,
Et j'aiaussi un bug à signaler, je ne peut pas utiliser cout dans les fonctions surchargées sinon l'affichage ne se fait seulement lorsqu'on ferme le socket, alors que ça marche très bien avec printf. Si quelqu'un sait pourquoi, merci de me le dire.

Codes Sources