begin process at 2012 02 13 00:31:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > BUBSOCK.H: LES SOCKET DEVIENNENT SIMPLES

BUBSOCK.H: LES SOCKET DEVIENNENT SIMPLES


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :9 605 / 1 057

Auteur : Bub325

Ecrire un message privé
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   bubsock

Télécharger le zip


 Sources du même auteur

PARTAGE DE VARIABLE ENTRE PLUSIEUR PROGRAMMES (FILEMAPPING)
Source avec Zip BUBSOCKCPP.H: OBJET SOCKET TRÈS SIMPLE D'UTILISATION
Source avec Zip NAVAL_FLEET325 -&GT; COMBAT D'IA
Source avec Zip MORPION325 -&GT; COMBAT D'IA

 Sources de la même categorie

Source avec Zip Source avec une capture TRACEROUTE [WINPCAP] par ganjarasta
Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas
Source avec Zip Source avec une capture SECURE REMOTE SHELL [WIN32] par ganjarasta
Source avec Zip Source avec une capture SUIVI DE PRODUCTION ONDULEUR PHOTOVOLTAÏQUE SOLARMAX par brunovan
Source avec Zip MINICHAT MULTI-CLIENT par wisar

Commentaires et avis

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!

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!

Commentaire de chmod777 le 22/05/2003 18:36:12

excellent, bravo, vraiment

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 =)

Commentaire de Bub325 le 04/06/2003 11:55:03

merci =)

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

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 ;)

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

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

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.

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

Commentaire de victorcoasne le 05/07/2004 11:58:17

Merci de l'adapter à Dev-C++

Commentaire de yoshyman le 12/02/2006 21:28:15

super source

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

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

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.

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,398 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales