Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

BUBSOCK.H: LES SOCKET DEVIENNENT SIMPLES


Information sur la source

Catégorie :Réseaux & Internet Niveau : Débutant Date de création : 21/05/2003 Date de mise à jour : 21/05/2003 20:48:48 Vu / téléchargé: 7 747 / 972

Note :
8,09 / 10 - par 11 personnes
8,09 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

Description

Et bien j'ai voulu me lancer dans les socket, mais j'ai trouvé ça assez chiant et compliqué alors j'ai fais un header poiur simplifier tout ça.

Sivre les exemples pour comprendre l'utilisation, il gère très bien l'utilisation simultané de plusieur socket qu'ils soit serveur ou client.

Ne pas oublier de mettre les #define des fonctions que vous utilisez avant d'inclure le fichier 'bubsock.h'.
 

Source

  • //////////////////////////////////////////////////////////////
  • // Code simple d'un client telnet
  • //////////////////////////////////////////////////////////////
  • #include <stdio.h>
  • #define USE_SOCKCLOSE
  • #define USE_SOCKREAD
  • #include "..\bubsock.h"
  • SOCKET Client;
  • void SOCKREAD(SOCKET _Client,char* chaine)
  • {
  • printf("Serveur: %s",chaine);
  • }
  • void SOCKCLOSE(SOCKET _Client)
  • {
  • printf("Le serveur a ete deconnecte\n");
  • exit(0);
  • }
  • int main()
  • {
  • if (sockopen(&Client,"127.0.0.1",23) != 0)
  • {
  • printf("Connexion impossible\n");
  • exit(0);
  • }
  • printf("Vous etes connecte\n");
  • while(1)
  • {
  • char chaine[0xFF];
  • int c = 0;
  • do
  • {
  • chaine[c++] = getc(stdin);
  • chaine[c] = '\0';
  • if (!strcmp(chaine,"exit"))
  • {
  • sockclose(Client);
  • exit(0);
  • }
  • } while (chaine[c-1] != '\n');
  • sockwrite(Client,chaine);
  • }
  • return 0;
  • ////////////////////////////////////////////////////////////////////////////
  • // Code simple d'un serveur telnet
  • ////////////////////////////////////////////////////////////////////////////
  • #include <stdio.h>
  • #define USE_SOCKLISTEN
  • #define USE_SOCKCLOSE
  • #define USE_SOCKREAD
  • #include "..\bubsock.h"
  • SOCKET Client = INVALID_SOCKET;
  • SOCKET Serv;
  • void SOCKLISTEN(SOCKET _Client)
  • {
  • if (Client == INVALID_SOCKET)
  • {
  • printf("Un client est arrivé\n");
  • Client = _Client;
  • }
  • else sockclose(_Client);
  • }
  • void SOCKREAD(SOCKET _Client,char* chaine)
  • {
  • printf("Client: %s",chaine);
  • }
  • void SOCKCLOSE(SOCKET _Client)
  • {
  • if (_Client == Client)
  • {
  • printf("Le client s'est deconnecte\n");
  • exit(0);
  • }
  • }
  • int main(int argc, char* argv[])
  • {
  • if (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) sockclose(Client);
  • exit(0);
  • }
  • } while (chaine[c-1] != '\n');
  • if (Client != INVALID_SOCKET) sockwrite(Client,chaine);
  • }
  • return 0;
  • }
//////////////////////////////////////////////////////////////
// Code simple d'un client telnet
//////////////////////////////////////////////////////////////

#include <stdio.h>

#define USE_SOCKCLOSE
#define USE_SOCKREAD
#include "..\bubsock.h"

SOCKET Client;

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

void SOCKCLOSE(SOCKET _Client)
{
	printf("Le serveur a ete deconnecte\n");
	exit(0);
}

int main()
{
	if (sockopen(&Client,"127.0.0.1",23) != 0)
	{
		printf("Connexion impossible\n");
		exit(0);
	}
    printf("Vous etes connecte\n");
    while(1) 
	{
		char chaine[0xFF];
		int c = 0;
		do
		{

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

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


////////////////////////////////////////////////////////////////////////////
// Code simple d'un serveur telnet
////////////////////////////////////////////////////////////////////////////

#include <stdio.h>

#define USE_SOCKLISTEN
#define USE_SOCKCLOSE
#define USE_SOCKREAD
#include "..\bubsock.h"

SOCKET Client = INVALID_SOCKET;
SOCKET Serv;

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

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

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

int main(int argc, char* argv[])
{
	if (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) sockclose(Client);
				exit(0);
			}

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

Conclusion

Donnez moi critique, remarques et impressions ainsi que des idées pour l'améliorer.

Merci
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   bubsock

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de GoWoLoPsY le 21/05/2003 21:34:04

Je viens de l'utiliser, je commencais a comprendre les cockets doucement, mais là j'avoue je impressionné, c'est aussi simple que les sockets de mIRC c'est vraiment trop bien, je vous jure!

signaler à un administrateur
Commentaire de GoWoLoPsY le 21/05/2003 22:16:36

Je refais sans les fautes:
Je viens de l'utiliser, je commençais à comprendre les sockets doucement, mais là j'avoue je suis impréssioné, c'est aussi simple que les sockets mIRC, c'est vraiment trop bien, je vous jure!

signaler à un administrateur
Commentaire de chmod777 le 22/05/2003 18:36:12

excellent, bravo, vraiment

signaler à un administrateur
Commentaire de Bub325 le 27/05/2003 20:32:00

( Vue 273 fois) et pas notée une seule fois... allé un petit effort svp que je sache à quoi m'en tenir =)

signaler à un administrateur
Commentaire de Bub325 le 04/06/2003 11:55:03

merci =)

signaler à un administrateur
Commentaire de Narcissus le 10/07/2003 18:12:02

ehh ohh, tu pourrais m'envoyer le fichier winsock.h
netcongig.h
sys/socket.h
sys/filio.h


merci
10/10

signaler à un administrateur
Commentaire de Anacr0x le 26/07/2003 23:46:14

moi j'ai un ptit pb, quand un client se déconnecte d'un serveur, le serveur en écoute ne l'est plus... et impossible de le relancer, d'ou vient le pb ?? De plus, j'ai pas l'impression qu'un serveur crée avec ce fichier soi multi-client... Ca ne serait pas possible d'améliorer ça ? (moi je m'y conné pas beaucoup sur le sujet...).
Sinon bravo, j'ai eu du mal a comprendre comment ca marche mais ça ma bien aidé quand même ;)

signaler à un administrateur
Commentaire de Anacr0x le 27/07/2003 22:21:58

petite précision, mon prog est en win32 et j'ai virer les "exit(0);" de l'exemple, c'est pour cette raison que je peut relancer l'écoute sans avoir a éteindre et re-éxécuté le prog

signaler à un administrateur
Commentaire de Bub325 le 03/08/2003 00:11:53

Et bien en faite je l'ai codé comme ça :

//donne une valeur de départ au socket
SOCKET Client = INVALID_SOCKET;
//...
void SOCKLISTEN(SOCKET _Client)
{
//Si le a la valeure donnée au départ (INVALID_SOCKET)
    if (Client == INVALID_SOCKET)
    {
        printf("Un client est arrivé
");
        Client = _Client;
    }
//Sinon on refuse la connexion
    else sockclose(_Client);
}
//---
void SOCKCLOSE(SOCKET _Client)
{
    if (_Client == Client)
    {
        printf("Le client s'est deconnecte
");
        exit(0);
    }
}

La manière la plus simple pour arranger çaserai d'écrire :

void SOCKCLOSE(SOCKET _Client)
{
    if (_Client == Client)
    {
        printf("Le client s'est deconnecte
");
//Redonne la valeur de départ au socket
        Client = INVALID_SOCKET;
    }
}

Sinon pour le multi-client ça marche sans problème (j'ai testé avant de l'envoyer sur le net). Il suffit de gérer un tableau de socket client par exemple.

J'espère avoir pu t'aider:
Bub325

signaler à un administrateur
Commentaire de enthaz le 24/08/2003 14:58:19

Rien a redire : simple efficace ... Super je met dix et merci ossi a AnacrOx pr m avoir indiké la source.

signaler à un administrateur
Commentaire de Melnofil le 05/11/2003 18:01:54

Pour tous ceux qui veulent débuter les sockets, dans mes fouilles j'ai trouvé les perles rares : ^_^
Le premier est pour apprendre à faire facilemt un client ou un serveur :
http://c.developpez.com/WalrusSock/
Le deuxième à voir absolument, explique comment utiliser select() pour faire des stockets non-bloquants :
http://www.progzone.free.fr/reseau/socket/sockasync.html

Ps: Dsl Bub325, pas commentaires vu que j'ai pas testé ta source

signaler à un administrateur
Commentaire de victorcoasne le 05/07/2004 11:58:17

Merci de l'adapter à Dev-C++

signaler à un administrateur
Commentaire de yoshyman le 12/02/2006 21:28:15

super source

signaler à un administrateur
Commentaire de Jeff_Trek le 26/06/2006 16:50:15

Salut Bub325,

J'ai un petit souci avec ta source :

- Lorsqu'un client se déconnecte le serveur plante

As tu déjà eu le cas ?

Peux tu m'aider ?

Merci d'avance

signaler à un administrateur
Commentaire de maladedede le 06/07/2006 20:56:34

Moi je suis pas trop pour

Parceque vos mieux laissez les socket comme il sont.

La en plus de connaitre les sockets il faut regarder comment fonctionne bulsock.h

Surtous que les socket c'est pas trop compliquer...aprés les déclaration de base un programme basic ne fait que send pui recv^^

Enfin c'est ce que je pense

signaler à un administrateur
Commentaire de zosos le 25/09/2006 11:46:19

Bonjour,
La compilation n'est pas un réel plaisir !
voici qu'il me parle du fichier inclu (.h) toutes ses références sont introuvables.

Comment y remédier ??? Merci.

signaler à un administrateur
Commentaire de cap_tain le 14/09/2008 22:24:36

bonjour

Bon travail
très propre
et compréhensible

merci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.