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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.