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

Soyez le premier à donner votre avis sur cette source.

Vue 5 073 fois - Téléchargée 533 fois

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

A voir également

Ajouter un commentaire

Commentaires

Messages postés
61
Date d'inscription
vendredi 22 août 2003
Statut
Membre
Dernière intervention
23 septembre 2006

---------------------------
Takebotz.exe - Erreur d'application
---------------------------
L'instruction à "0x004017d0" emploie l'adresse mémoire "0x0000000c". La mémoire ne peut pas être "read".


Cliquez sur OK pour terminer le programme.
Cliquez sur Annuler pour déboguer le programme
---------------------------
OK Annuler
---------------------------


j'ai carément sa moi
Messages postés
42
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
28 avril 2010

Etrange, mais je vous conseil d'utiliser bubsock.h (version C et non C++) car j'ai pu remarquer de nombreux bug sur bubsockcpp.h
Messages postés
153
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
31 octobre 2006
1
Salut j'ai une erreur quand je lance le serveur.exe.
Ca provient de la methode suivante :

DWORD WINAPI ServListen(LPVOID arg)
{
return (((INFOSOCK*)arg)->bubSock)->SERVLISTEN(*(((INFOSOCK*)arg)->Client));
}

Si tu sais pourquoi fais moi signe car je peux pas utiliser ta librairie qui est pourtant bien pratique.

Bon voila @ +
kobee12
Messages postés
42
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
28 avril 2010

car les fonctions membres sont déclaré public dans la class BUBSOCK dont hérite SOCKSERV. On peut donc les utiliser sans aucun problèmes. Quand au fonctions SOCKLISTEN SOCKREAD et SOCKCLOSE elles sont elles bien privées puisqu'il n'y a aucun appel exterieur.
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Je ne sais pas comment tu peux appeler les méthodes membres de la classe SOCKSERV car n'ayant pas spécifier de visibilité (public, private, protected) dans la déclaration de ta classe, ces méthodes sont par défaut des méthodes privées.

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.