IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques Discussion :

Programmation de socket sous windows


Sujet :

Bibliothèques

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 39
    Points : 38
    Points
    38
    Par défaut Programmation de socket sous windows
    Salut à tous ce qui suit en dessous est un extrait de code, avec toutes les bibliothèques, lors de la compilation avec VS 2005, j'obtiens les messages: "write" identifier not found e "read" identifier not found.
    Ces fonctions ne sont-elles pas définies dans la bibliothèque winsock2.h (j'ai essayé aussi avec winsock.h).
    Qu'elqu'un a t-il une idée ?
    Merci d'avance.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <winsock2.h>
    #include <windows.h>
     
    void shell (int sock)
    {
    	int l;
    	char buf[512];
    	struct    timeval time;
    	unsigned long    ul[2];
     
    	time.tv_sec = 1;
    	time.tv_usec = 0;
     
    	while(1)
    	{
    		ul[0]=1;
    		ul[1]=sock;
     
    		l=select(0,(fd_set*)&ul,NULL,NULL,&time);
    		if(l==1)
    		{
    			l=recv(sock,buf,sizeof(buf),0);
    			if (l<=0)
    			{
    				printf("\r\n[-] connection closed.\n");
    				return;
    			}
    			l=write(1,buf,l);
    			if (l<=0)
    			{
    				printf("\r\n[-] connection closed.\n");
    				return;
    			}
    		}
    		else
    		    {
    			l=read(0,buf,sizeof(buf));
    			if (l<=0)
    			{
    				printf("\r\n[-] connection closed.\n");
    				return;
    			}
    			l=send(sock,buf,l,0);
    			if (l<=0)
    			{
    				printf("\r\n[-] connection closed.\n");
    				return;
    			}
    		}
    	}
    }

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Tu as du piquer ce code de Unix et ça ne marche pas exactement de la même façon avec Visual C++ mais je ne saurais t'en dire plus sur Visual.

    http://msdn2.microsoft.com/fr-fr/lib...48(VS.80).aspx (Portage d'UNIX vers Win32)
    Les applications UNIX de base, y compris beaucoup d'applications CGI, sont normalement portées facilement vers Visual C++ sur Windows NT et Windows 2000. Des fonctions comme open, fopen, read, write et d'autres sont disponibles dans la bibliothèque Runtime Visual C++. Il existe en outre un mappage un à un entre les API C UNIX et Win32 : open et CreateFile, read et ReadFile, write et WriteFile, ioctl et DeviceIOControl, close et CloseFile, etc.
    Si ça peut t'aider...
    http://www.developpez.net/forums/sho...d.php?t=135894

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    OK, tu dois inclure io.h mais read et write sont dépréciés par Visual C++. Il préconise l'utilisation de _read et _write qui ne sont pas du tout portables.
    Tu auras sûrement des problèmes avec ce bout de code sous Visual... A toi de voir ce que ça vaut.
    Ceci pourra t'aider.
    http://emmanuel-delahaye.developpez.com/reseaux.htm

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 39
    Points : 38
    Points
    38
    Par défaut Super!
    Génial ça fonctionne, avec la bibliothèque io.h, en enffet je programme sous Linux donc peu pratique des bibliothèques de visual c++.
    Merci.
    @+

  5. #5
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Tu utilises mal select, il faut utiliser FD_ISSET sur le set et pas faire le retour de select == 1.

    Il faut uniquement tester avec -1 pour savoir si c'est un erreur s'est produite et coupler avec FD_ISSET sur toutes les valeurs de socket/file descriptor que tu souhaites tester.


    Il faut aussi utiliser FD_SET pour positionner les valeurs. "l=select(0,(fd_set*)&ul,NULL,NULL,&time);", ça c'est super crade et a priori non portable. Utiliser fd_set directement.
    Je ne répondrai à aucune question technique en privé

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Merci du conseil je le corrige tout de suite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. programmer en python sous windows avec emacs
    Par Mydriaze dans le forum Général Python
    Réponses: 5
    Dernier message: 24/09/2007, 22h01
  2. Liste des programme ou applications sous windows xp
    Par bob40 dans le forum Windows XP
    Réponses: 1
    Dernier message: 12/01/2006, 02h14
  3. socket sous windows
    Par youp_db dans le forum Windows
    Réponses: 3
    Dernier message: 29/08/2005, 15h53
  4. Socket sous windows
    Par Higestromm dans le forum Windows
    Réponses: 20
    Dernier message: 11/01/2005, 17h47
  5. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo