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

C++ Discussion :

Socket et send();


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Socket et send();
    Voilà j'ai utilisé le tuto http://c.developpez.com/WalrusSock/

    J'arrive à me connecter à mon serveur etc mais le probleme est au niveau d'envoyer un message...
    Rien ne s'affiche quand j'envois un message du serveur au client....
    Quelqu'un pourrait m'expliquer uqoi faire exactement:

    Serveur:
    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
    #include <cstdlib>
    #include <iostream>
    #include <winsock2.h>
     
    using namespace std;
     
    int main()
    {
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);
    SOCKET sock;
    SOCKET csock;
    SOCKADDR_IN sin;
    SOCKADDR_IN csin;
    sock = socket(AF_INET, SOCK_STREAM, 0);
    sin.sin_addr.s_addr= INADDR_ANY;
    sin.sin_family= AF_INET;
    sin.sin_port= htons(4148);
    bind(sock, (SOCKADDR *)&sin, sizeof(sin));
    listen(sock, 1);
    cout<<"\nWaiting for connection....\n" ;
    while(1)
    {
    int sinsize = sizeof(csin);
    if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
    {
              cout<<"Connected\n";
    send(csock, "Hello world!\r\n", 14, 0);
     
    }
        system("PAUSE");
        return EXIT_SUCCESS;
    }}
    Client :
    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
    #include <cstdlib>
    #include <iostream>
    #include <winsock2.h>
     
    using namespace std;
     
    int main()
    {
        char texte;
     
        WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);
    SOCKET sock;
    SOCKADDR_IN sin;
    sin.sin_addr.s_addr= inet_addr("127.0.0.1");
    sin.sin_family= AF_INET;
    sin.sin_port= htons(4148);
    sock = socket(AF_INET,SOCK_STREAM,0);
    bind(sock, (SOCKADDR *)&sin, sizeof(sin));
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
     
    send(sock, "Test", 14, 0);
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

  2. #2
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    C'est normal: ton client n'est pas programmer pour recevoir de message. Essaye ca

    Client :
    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
     
    #include <cstdlib>
    #include <iostream>
    #include <winsock2.h>
     
    using namespace std;
     
    #define MAXLINE 4096 // définit la longueur maximum de la chaine lue
     
    int main()
    {
    	int n; // longueur réelle de la chaine lue
    	char recvline[MAXLINE + 1]; // chaine de caractère lue
     
        char texte;
     
        WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);
    SOCKET sock;
    SOCKADDR_IN sin;
    sin.sin_addr.s_addr= inet_addr("127.0.0.1");
    sin.sin_family= AF_INET;
    sin.sin_port= htons(4148);
    sock = socket(AF_INET,SOCK_STREAM,0);
    bind(sock, (SOCKADDR *)&sin, sizeof(sin));
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
     
    	while ( (n = recv(sock, recvline, MAXLINE,0)) > 0) //attend le message du serveur
    	{
    		recvline[n] = 0; //ajoute le caractère de fin de chaine, à la fin de la chaine :p
    		cout << recvline << endl; // le renvoie à l'écran
    	}
     
    	if (n < 0) // en cas d'erreur, lors de la réception
    	{
    		perror("read error");
    		exit(1);
    	}
    	closesocket (sock); //ferme ta socket
    	WSACleanup ();
    	system("PAUSE") ;
      return EXIT_SUCCESS;
    }
    En fait, ton client envoyait un message au serveur, mais n'écoutait pas les messages entrants... Et ton serveur lui aussi voulait envoyer un message au client, mais n'écoutait pas les messages entrants. D'où ton soucis

    N'hésite pas à poser des questions si ca ne marche pas, ou si tu n'as pas compris quelque chose.
    Espérant t'avoir aidé.... A bientot peut être

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci je vais essayer mais je suis aps sur de tout bien comprendre:p

    Si tu as msn tu peux me contacter stp deviante1@hotmail.com^^

Discussions similaires

  1. socket s.send() unicode
    Par jack_x4 dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 29/06/2010, 22h18
  2. [socket] Pb send() et recv()
    Par Tymk dans le forum C++
    Réponses: 6
    Dernier message: 03/06/2008, 18h44
  3. Pb de socket : select() et send()
    Par olive_le_malin dans le forum Réseau
    Réponses: 16
    Dernier message: 11/06/2006, 11h42
  4. [SOCKET] TCP : select devant send();
    Par trois_1 dans le forum Développement
    Réponses: 4
    Dernier message: 02/03/2004, 18h10
  5. [SOCKET C] deux send() pour un recv()
    Par trois_1 dans le forum Développement
    Réponses: 4
    Dernier message: 01/12/2003, 19h13

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