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 :

windows socket, problème envoi de structure :s


Sujet :

Réseau C

  1. #1
    Membre habitué

    Inscrit en
    Janvier 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 188
    Points : 142
    Points
    142
    Par défaut windows socket, problème envoi de structure :s
    je n'arrive pas à envoyer / recevoir des structures en utilisant send / recv.
    ça me fait carrément planter la cmd. voici l'erreur windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AppName: serveur.exe	 AppVer: 0.0.0.0	 ModName: serveur.exe
    ModVer: 0.0.0.0	 Offset: 00001415
    voici le début du code (ouverture de la socket)
    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
     
    int main(int argc, char *argv[], char **envp){
        SOCKET sock;	
    #ifdef WIN32
        WSADATA wsaData;
     
        // Importation de l'API Socket
        if(WSAStartup(MAKEWORD(2,0), &wsaData) != 0){
    	perror("Pb Importation dll API Socket :s\n");
    	return -1; // on quitte alors le programme
        }
        else{
    	puts ("WIN: winsock2: OK");
        }
    #endif
        // Création d'une instance de socket (protocole TCP/IP)
        openSocket(&sock);
     
        char *adresse = "192.168.0.2";
        SOCKADDR_IN adresse_socket;
     
        adresse_socket.sin_family = AF_INET;
        adresse_socket.sin_port = htons(PORTSERVER);
        adresse_socket.sin_addr.s_addr = inet_addr(adresse);
     
        if( connect(sock,(struct sockaddr *) &adresse_socket, 
    	sizeof(adresse_socket)) != 0){
     	perror("Pb Connexion socket\n");
    	return -3; // echec
        }

    Le code qui plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        myStruct tmp;
        remplirStruct(&tmp); // fonction qui me remplit la structure
     
    // pour l'émission ( coté serveur) :
        send(sock,(void *)&tmp,sizeof(myStruct),0);
     
    // pour la réception (coté client)
        recv(sock,(void *)&tmp,sizeof(myStruct),0);
    la fin du code avec les deux fonctions d'ouverture et fermeture d'une socket :
    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
     
        closeSocket(&sock);
    #ifdef WIN32    
        WSACleanup();
    #endif
        exit(0);
    }
     
    int closeSocket(SOCKET *sock){
        if (closesocket(*sock)!=0){
    	printf("# Error fermeture socket %d\n",*sock);
        }
        else{
    	printf ("# Socket %d (TCP/IP mode) is now closed\n", *sock);
        }
    }
     
    int openSocket(SOCKET *sock){
        if ( (*sock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET){
    	perror("# Pb Création Instance Socket TCP/IP\n");
    	return -2; // echec
        }
        else{
    	printf ("# Socket %d is now opened in TCP/IP mode\n", *sock);
        }
    }
    A priori on est pas censé faire comme ça :s
    est ce possible ou on est obliger d'envoyer des char* ?
    cé relou si on peut pas le faire...

  2. #2
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Ceci est ton code copié collé?

    Parce que c'est normal que ça plante si tu n'initialises pas la socket...

  3. #3
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Tu n'as pas initialisé sock...
    L'itération est humaine; la récursion, divine.

  4. #4
    Membre habitué

    Inscrit en
    Janvier 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 188
    Points : 142
    Points
    142
    Par défaut
    non c'est pas tout le code...
    la socket est ouverte avant et fermée après.
    elle est bien ouverte et se ferme quand même correctement (malgré le plantage windows).
    Je fais un envoie dans chaque sens de message (char *) ainsi qu'un envoie de fichier.
    En fait je crois que j'ai pas précisé, c'est le client qui plante.
    j'ai le serveur qui tourne sous linux et le client sous windows. j'ai pas test de voir ce que ça donne si je met le serveur lui aussi sur windows mais à mon avis il planterait aussi...
    dans tous les cas, j'aimerai faire marcher le client.
    merci d'avance pour votre aide

    bon je rajoute le début et la fin du code..

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    On peut avoir le code entier stp.

    Les cast sont inutiles.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  6. #6
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    En fait je crois que j'ai pas précisé, c'est le client qui plante.
    serveur.exe, drôle de nom pour un client !

    bon je rajoute le début et la fin du code..
    Vaut mieux, oui.
    L'itération est humaine; la récursion, divine.

  7. #7
    Membre habitué

    Inscrit en
    Janvier 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 188
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par Mayti4
    serveur.exe, drôle de nom pour un client !
    ouais bon... c'est vrai mais quand je disais client, c'était pour dire client socket.
    je suis en phase de test. du coup j'ai mis des noms assez court mais à la base mon client contient un deamon (et mon serveur se connecte aux clients).

    voilà, j'ai rajouter le code.

  8. #8
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Fais un test : affiche sizeof(myStruct) sous Windows et sous Linux.
    L'itération est humaine; la récursion, divine.

Discussions similaires

  1. [Débutant] Problème Envoi/reception de donnee par socket
    Par Kisskool83 dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/06/2011, 13h11
  2. Programmation Socket : problème lors de l'envoie du fichier.
    Par WhiteTigerZ dans le forum Entrée/Sortie
    Réponses: 17
    Dernier message: 14/05/2011, 10h37
  3. Envoi de structure via socket
    Par RoZyk dans le forum Réseau
    Réponses: 4
    Dernier message: 09/11/2010, 10h01
  4. [C++][SOCKET]Problème à l'envoi
    Par Raton dans le forum Développement
    Réponses: 4
    Dernier message: 10/07/2006, 11h06
  5. [SOCKET] Envoi de structure
    Par Lolita59 dans le forum Réseau
    Réponses: 3
    Dernier message: 17/05/2006, 15h30

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