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

Réseau C Discussion :

[Socket]Incompatible type ?


Sujet :

Réseau C

  1. #21
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Oui j'ai lu mais je comprends pas, je dois vraiment etre fatigué en fin de semaine...
    Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SOCKET dsocket;
     
    dsocket = socket(AF_INET, SOCK_STREAM, 0);
     
    if (dsocket == -1) 
    {
    	/* Erreur lors de la création de la socket... */
    	printf("Impossible d'initialiser la connexion\n");
    	exit(0);
    }
    dsocket a beau etre différent de -1 (je le vois en mode debug), ça rentre quand meme dans la condition

  2. #22
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    tu peux paster l'intégralité de ton code stp ?

  3. #23
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Aucun problem

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    #include <stdio.h>     // E/S habituelles
    #include <winsock2.h>  // Les Socket
     
    #pragma comment(lib, "ws2_32.lib")
     
     
    /* --------------------------------------------------- */
    /*         P R O G R A M M E   P R I N C I P A L       */
    /*         =====================================       */
    /*---------------------------------------------------- */
    int main(int argc, char *argv[])
    {
    	char Adresse_Serveur[20];             // Contiendra l'adresse du serveur SMTP
    	SOCKET dsocket;                          // Descripteur de fichier
    	struct sockaddr_in Addresse_Distante; // Socket
    	struct hostent *Adresse_Resolue;      // structure pour résoudre l'adresse
     
    	// on demande l'adresse du serveur sur lequel on souhaite se connecter
        printf("Serveur SMTP : ");
    	scanf("%s", &Adresse_Serveur);
     
    	dsocket = socket(AF_INET, SOCK_STREAM, 0);
     
    	// Création de la socket 
    	if (dsocket == -1) 
    	{
    		// Erreur lors de la création de la socket... 
    		printf("Impossible d'initialiser la connexion\n");
    		exit(0);
    	}
    	else
    	{
    		// Type de famille : IPV4 
    		Addresse_Distante.sin_family = AF_INET;
     
    		// Port sur lequel on veut se connecter (25 : SMTP) 
    		Addresse_Distante.sin_port = htons(25);
     
    		// Adresse IP du destinataire 
    		Addresse_Distante.sin_addr.s_addr = inet_addr(Addresse_Distante);
     
    		// Remplie de 0 l'élément sin_zero de la strucuture sockaddr_in 
    		memset(&(Addresse_Distante.sin_zero), '\0', 8);
    	}
     
    	Adresse_Resolue = gethostbyname(Adresse_Serveur);
     
    	// Tentavie de connexion au serveur 
    	if (connect(dsocket, (struct sockaddr *)&Addresse_Distante, sizeof(struct sockaddr)) == -1) 
    	{
    		// Erreur lors de la connexion...
    		printf("Echec de la connexion : ");
    		printf("%s\n",inet_ntoa(Addresse_Distante.sin_addr));
    	}
    	else
    	{
    		// On va essayer de se connecter au serveur
    		printf("Connexion au serveur.....");
    		printf("%s\n",inet_ntoa(Addresse_Distante.sin_addr));
    	}
     
    	return 0;
    }

    ce programme ne fait rien concretemenr, j'apprends à utiliser les sockets...

  4. #24
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    Si je t'ai demandé si tu avais lu le tutorial c'est parce'que ton erreur est assez grosse.
    Peut-être que le relire attentivement ne fera pas de mal

    Le tutorial commence en ces termes :

    Créer un socket en C/C++ est relativement simple, contrairement à ce que la majorité du monde pensent. La création d'un socket est faite par une chaîne de commandes. Pour commencer, il faut initialiser WSAStartup(). Un groupe de variables seront aussi nécéssaire pour faire cela. Bon, assez de bavardage et passons au code lui-même.
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
    void main()
    {
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);
    }
    WSADATA WSAData, l'initialisation d'une variable WSADATA. La variable va être utilisée pour le démarrage de WSAStartup(). Elle n'aura pas d'autre utilisation, généralement. WSAStartup(MAKEWORD(2,0), &WSAData), ce qui dis à votre ordinateur que vous allez utiliser des sockets.
    Allez parce'que je suis gentil je te donne le lien vers le tutorial :
    http://c.developpez.com/WalrusSock/

    Bon courage pour la suite

  5. #25
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Pfff je suis vraiment désolés de t'avoir déranger pour ça
    C'était gros comme comme une mongolfière....
    Promis je réfléchis encore plus avant de poster la prochaine fois.

    P.S : faut pas trop m'en vouloir c est la fin de la semaine et Delphi me lobotomise le cerveau au boulot

  6. #26
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Hors Sujet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%s", &Adresse_Serveur);
    C'est plutot sans le & ou bien &Adresse_Serveur[0].
    C'est bon je vais dormir

    Nas'

  7. #27
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Merci pour la correction

  8. #28
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Willand
    ah oui ce code marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void mafonction(char *unechaine)
    {
            printf("%s", unechaine);
    }
     
    int main()
    {
            mafonction("chaine");
            return 0;
    }
    mais je comprend pas pourquoi, la je donne pas l'adresse du premier caractère de la chaine en argument de mafonction...
    Si tu donne bien l'adresse du premier caractere, "chaine" est une chaine (au sens C du terme) constante donc un tableau constant de char, ce qui fait qu'en argument de fonction ca corrspond a un pointeur sur le debut de la chaine.

    Citation Envoyé par Yabo
    Sur les OS récents l'adressage ce fait sur 32 bit (la taille d'un int). Donc on peut avoir autant d'octet en mémoire qu'on peut addresser. Mais avant ca se faisait sur 16 bit (donc on ne pouvait addresser que moitié-moins de mémoire) et en C lorsqu'on voulait addresser sur 32 bit on utilisait le mot FAR.
    Encore une fois c'était y a longtemps et ce sont des souvenirs sur ce que j'avais lu dans un article. Si je me trompe corrigez moi
    C'est bien lie a l'adresage de la memoire. En gros un pointeur NEAR designait quelquechose se trouvant dans la meme page de 64ko (le pointeur ne devait donc contenir que l'adresse dans la page) et un pinteur FAR permettait de designer quelquechose se trouvant potentiellement dans une autre page (il faut alors l'adresse dans la page et la reference de la page). Sur les systemes du types Windows 9.X, Windows NT, etc... c'est totalement inutile.

  9. #29
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Yabo
    Le FAR est une vieille notation des pointeurs des pointeurs en C. Il me semble que c'était lorsque l'adressage se faisait sur 16 bit et qu'on voulait un pointeur 32 bit on utilisait void FAR * ptr;.

    Enfin je parle de choses que je n'ai pas connue, Emmanuel pour peut-être confirmer (ou infirmer) mes dires
    En fait, FAR (ou far) est une extension des compilateurs pour x86 en mode réel (16-bits).

    Ce mode supporte plusieurs modèles de mémoire (tiny, small, medium, compact, large, huge). Dans certains modèles, les adresses sont 'near' par défaut (codées en 16 bit) et d'autres 'far' par défaut (codées sur 32-bit[1]),

    Souvent, une bibliothèque est compilée en mode 'large', car les adresses ont besoin d'être longues. Si on utilise une telle bibliothèque avec une application compilée en mode small, les adresses seront codée en 16-bits, ce qui n'est pas compatible avec le format attendu par la bibliothèque. C'est pourquoi les implémenteurs du langage C sur x86 mode réel ont inventé les mots clés 'near' et 'far' (_far, FAR...) pour préciser les intentions.

    Si une bibliothèque prévue pour fonctionner en mode large doit accepter n'importe quel modèle de mémoire, il suffit de qualifier les pointeurs avec le mot far dans l'interface (le prototype qui est dans le fichier d'entête de la bibliothèque):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       int function (char far *s);
    Mais comme ce mot clé n'est pas connu de tous les compilateurs, voire ignoré dans les mode 'plats' (32-bit), on a généralement défini une macro FAR dont la valeur dépend du contexte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifdef 0
    #elif defined (__BORLANDC__)
    #define FAR far
    #elif defined (_MSCV)
    #define FAR _far
    #elif defined (_DIAB)
    #define FAR 
    #else
    #error FAR is undefined for this platform
    #endif
    que l'on utilise ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       int function (char FAR *s);
    selon le contexte, et sans qu'on ait à modifier le code, on obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       int function (char far *s);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       int function (char _far *s);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       int function (char *s);
    -------------------------
    [1] mais ne couvrant en fait que 20 bits physiques, soit 1 Mbyte. Les processeurs Intel en mode réel ont rendu fous plus d'un programmeur...
    Pas de Wi-Fi à la maison : CPL

  10. #30
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    merci pour les explications

  11. #31
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut
    J'étais pas si loin que ca de al solution Merci Emmanuel

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Incompatible types in return
    Par DJ Caësar 9114 dans le forum C
    Réponses: 9
    Dernier message: 15/04/2007, 23h22
  2. error: incompatible types in assignment
    Par panda31 dans le forum C
    Réponses: 2
    Dernier message: 13/06/2006, 10h46
  3. Réponses: 4
    Dernier message: 05/12/2005, 19h24
  4. [D6] OnKeyPress- incompatibles types-
    Par Redsky dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2005, 12h16

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