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 => lire a la "java"


Sujet :

Réseau C

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut SOCKET => lire a la "java"
    bonjour,
    je debut un peu en C et dans les SOCKET
    je ne vois pas ni n'ai trouve comment faire une boucle du genre :

    tant que recv != NULL
    stocker ce qui est lu;
    afficher ce qui est lu;
    fin

    ce qui est l'equivalent en java de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    StringBuffer buf = new StringBuffer();//stockeras les char lus
    char c = mySock.read(); //on lit le premier char
    while( c != -1){ //tant que ce n'est pas la fin du flux
    buf.append((char)c);//on ajoute le char
    c = mySock.read();//on lit le suivant
    }
    System.out.println(buf.toString());//on affiche le tout
    EDIT : j'ai cherche dans les man et dans le forum je n'ai rien trouve d'interressant pour moi
    ainsi que sur le tuto de ce site sur les socket

  2. #2
    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
    Qu'est-ce que tu ne comprends pas ?

    Tu as un exemple d'utilisation de recv ici.

    printf pour afficher une chaîne.
    L'itération est humaine; la récursion, divine.

  3. #3
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    je le sais lol
    mais comment faire une boucle qui recuperais tout ce que la socket envoi ?
    je ne vois pas
    ya-t il une sorte de EOF?

    merci de l'interet

  4. #4
    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
    recv renvoie 0 si la connection s'est fermé et -1 en cas d'erreur.
    L'itération est humaine; la récursion, divine.

  5. #5
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    j'essai desuite merci bcp

  6. #6
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     int err;
        while(err != 0)
        {
            memset(buffer,0,1024);
            err=recv(socket,buffer,1024,0);
            if(err==SOCKET_ERROR)
            {
                printf("Erreur dans la reception");
                return 0;
            }
            printf("Le serveur a envoye :\n%s\n",buffer);
        }
    j'ai essayé ca mais il me met a chaque fois erreur dans la reception
    pourtant il se connecte bien a mon serveur java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    serveur demare!!! en attente d'une connection...
    connection acepter n1
    Spawning 1
    connection acepter n2
    Spawning 2
    connection acepter n3
    Spawning 3
    connection acepter n4
    Spawning 4
    connection acepter n5
    Spawning 5

  7. #7
    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
    int err;
    while(err != 0)
    Utilise do .. while.

    Sinon ton code est correct.

    Que renvoie GetLastError() ?
    L'itération est humaine; la récursion, divine.

  8. #8
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      int err;
       do
        {
            GetLastError();
            memset(buffer,0,1024);
            err=recv(socket,buffer,1024,0);
            GetLastError();
            if(err==SOCKET_ERROR)
            {
                printf("Erreur dans la reception");
                break;
            }
            printf("Le serveur a envoye :\n%s\n",buffer);
        } while(err > 0);
    il ne renvoi rien

    veux tu le code complet ?

  9. #9
    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
    GetLastError();
    Non :
    if(err==SOCKET_ERROR)
    {
    int error = GetLastError();
    printf("Erreur dans la reception: %d\n", error);
    break;
    }
    veux tu le code complet ?
    Vaut mieux oui.
    L'itération est humaine; la récursion, divine.

  10. #10
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
     
    int init(void)
    {
        WORD wVersionRequested;
        WSADATA wsaData;
        int err;
        wVersionRequested = MAKEWORD( 2, 0 );
        err = WSAStartup( wVersionRequested, &wsaData );
        if ( err != 0 )
        {
            return SOCKET_ERROR; //impossible de charger winsock.dll
        }
        //-- Ceci permet de vérifier que Winsock supporte bien la version 2.0 --//
        if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 )
        {
            WSACleanup();
            return SOCKET_ERROR; //impossible de charger winsock.dll
        }
        else
        {
            return 1; //Winsock.dll succefully initialised
        }
    }
     
    // On initialise et connect le socket
    void initSocket (char *addr, int port, SOCKET *sock, SOCKADDR_IN *sin)
    {
        sin->sin_addr.s_addr    = inet_addr(addr);
        sin->sin_family        = AF_INET;
        sin->sin_port        = htons(port);
        *sock = socket(AF_INET,SOCK_STREAM,0);
        bind(*sock, (SOCKADDR *)sin, sizeof(SOCKADDR_IN));
        connect(*sock, (SOCKADDR *)sin, sizeof(SOCKADDR_IN));
    }
     
     
    void closeSocket (SOCKET sock)
    {
        closesocket(sock);
        WSACleanup();
    }
     
    int main ()
    {
        SOCKET sock;
        SOCKADDR_IN sin;
        char *buffer = (char*)malloc(1024);
        char *mdp = "qqchose";
        init();
        initSocket("127.0.0.1", 8189, &sock, &sin);
        int err;
        do
        {
            GetLastError();
            memset(buffer,0,1024);
            err=recv(socket,buffer,1024,0);
            GetLastError();
            if(err==SOCKET_ERROR)
            {
                int error = GetLastError();
                printf("Erreur dans la reception: %d\n", error);
                break;
            }
            printf("Le serveur a envoye :\n%s\n",buffer);
        }
        while(err > 0);
        send(sock,mdp,strlen(mdp),0);
        free(buffer);
     
        closeSocket(sock);
        return 0;
    }
    erreur 10038

    merci

  11. #11
    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
    10038 = An operation was attempted on something that is not a socket.
    recv(socket,buffer,1024,0);
    socket est un nom réservé, c'est une fonction.

    recv(sock,buffer,1024,0);
    L'itération est humaine; la récursion, divine.

  12. #12
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    je suis un gros boulet
    quel con alors

    merci bcp

    resolu

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

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