begin process at 2012 02 12 03:22:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Prob avec les sockets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Prob avec les sockets

lundi 25 avril 2005 à 19:56:12 | Prob avec les sockets

Sload

Membre Club
Bonjour à tous !
Voila mon probleme , j'essaye de develloper un logiciel client/serveur.
Je n'en suis qu'au tout début et j'ai déja un probleme lol !

Voila le code du serveur :

_______________________________________________________________
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")


using namespace std;

int main(int argc, char *argv[])
{
    char *texte = new char[255];
   
    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(23);
    bind(sock, (SOCKADDR *)&sin, sizeof(sin));
    listen(sock, 0);
    while(1)
    {
        int sinsize = sizeof(csin);
        if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
        {
            cout << "Client connecte !\n";
            texte = "Connexion avec le Serveur OK !";

            send(csock, texte, strlen(texte), 0);
            cout << "Texte envoye : " << texte << "\n";
            cout << "Taille du texte envoye : " << strlen(texte) << "\n";
        }
    }
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
___________________________________________________________________

et celui du client : ___________________________________________________________________
#include <cstdlib>
#include <iostream>
#include <winsock2.h>
#include <cstring>
#pragma comment(lib, "ws2_32.lib")

using namespace std;

int main(int argc, char *argv[])
{
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);
    SOCKET sock;
    SOCKADDR_IN sin;
    char *buffer = new char[255];
    sock = socket(AF_INET, SOCK_STREAM, 0);
    sin.sin_addr.s_addr            = inet_addr("127.0.0.1");
    sin.sin_family                = AF_INET;
    sin.sin_port                = htons(23);
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
    recv(sock, buffer, strlen(buffer), 0);
    cout << "Texte recu : " << buffer;
    cout << "Taille du texte recu : " << strlen(buffer);
    closesocket(sock);
    WSACleanup();
    int a;
    cin >> a;
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
___________________________________________________________________

Le probleme c'est que le client recoit ne recoit que les 3 premiers caractères soit "con" .
Avez vous une idée de la raison ?
En vous remerciant
Antoine PACAUD
http:\\www.sloadnet.com



lundi 25 avril 2005 à 20:54:27 | Re : Prob avec les sockets

Matt67

Bonsoir,

Ca doit venir de cette ligne dans le client
recv(sock, buffer, strlen(buffer), 0);
essaie
recv(sock, buffer, 254, 0);
et je ferais un petit memset pour initialiser le buffer de reception.

Matt...
lundi 25 avril 2005 à 21:11:16 | Re : Prob avec les sockets

minet03

pour pas d'eereur :
memset(buffer,0,sizeof(buffer));
recv(sock,buffer,sizeof(buffer),0);

strlen() retourne le nombre de caractère de ta chaine, donc 0. Mais là puisqu'elle n'est pas initialisé strlen() retourne une valeur fausse.
sizeof() renvoi directement la taille alloué par ta variable.

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite
lundi 25 avril 2005 à 21:28:20 | Re : Prob avec les sockets

Matt67

bonsoir,

sizeof(buffer) va te renvoyer 4 et non la taille de ton buffer.

Matt...
mardi 26 avril 2005 à 01:54:09 | Re : Prob avec les sockets

NitRic

Réponse acceptée !
En effet car `buffer` est un pointeur.

Au fait, fait attention car `recv()` n'assure pas
un '\0' dans `buffer`, `recv()` se fou de savoir
si c'est du texte, binaire, ... il prend les données
présentent et met le tout dans ton tampon/buffer ...

int ret = recv( sock, buffer, 254, 0 );
if ( ret > 0 )
{
    buffer[ret] = '\0';
    cout << buffer << endl;
}
else cout << "erreur!!!" << endl;

mais si tu fais un `memset(buffer, 0, 255);` avant le recv() alors ca peu toujours aller ...

//
texte = "Connexion avec le Serveur OK !";
//
// tu devrais plutôt faire:
//
strcpy( texte,
"Connexion avec le Serveur OK !" );
//

tu as oublié tes `delete[]`:
delete [] texte; // serveur
delete [] buffer; // client

...


~(.:: NitRic ::.)~
mardi 26 avril 2005 à 23:35:48 | Re : Prob avec les sockets

Sload

Membre Club
Merci à tous !
Avec vos conseils ca marche maintenant !
En effet en utilisant memtest ca fonctionne.
Merci à Nitrick pour ses remarques ! C vrai je code un peu a la bourrin ! Je debute faut dire !

Antoine




Cette discussion est classée dans : int, include, char, sin, sock


Répondre à ce message

Sujets en rapport avec ce message

pb de compilation (prog utilisant un socket) [ par smook ] boujour a tous bon je vais commencer part bien vous detailler ce qui a detailler : j utilise dev c++ 4.9.9.2 et mon ^programme a pour but d ecouter un socket trop lents [ par cid7777777 ] bonjour,jessaye de faire un jeu qui peu se jouera 2 en reseau local.je ne connais absolument rien en reso, mais en fouillant sur le net,  jai trouver plus court chement avec le cout [ par developvbdebut ] Bonsoir tout le mondeJ'ai un probleme avec l'algo du plus cours chemin, je ne vois pas comment mis prendre. De plus, je dois affichier la distance e C++ Serveur web [ par kiki67100 ] Bonjour J'ai commencé a faire un serveur Pour affiché du texte sur le client Voici le code#include #include #include #include c<br Winsock2 et Wifi [ par djin94 ] Bonjour,Je programme sous Visual C++ et je souhaite établir une connection UDP entre deux pc via une liaison Wifi. J'ai essayé avec Winsock2 mais ca n socket raw [ par moi zork ] Bonjour,Je suis entrain de m'entrainer sur les socket raw et je bute sur :#include #include using namespace std;int main (void){    int sock;  sock = Probléme pour lire le buffer au lancement de la connexion [ par logant83 ] Bonsoir, voila enfaite j'ai établi une connexion sur un server irc grace au socket mais quand je recois sur le buffer les différente informations (Ell Création d'un client IRC,reception ok, emission: pas bon [ par freekid ] Bonjour tout le monde,je bosse actuellement sur la création d'un client IRC.Pour l'instant il s'agit d'un simple mode console.Et donc quand le program [C] socket [ par sheorogath ] bonjour ,j'essai de me faire une sorte de lib client dans un premier temps pour utiliser les socket mais avec mon code je ne peut me connecter null pa Winsock : Le nom de la machine [ par wxccxw ] hello tout le monde, bon voila j'ai un petit probleme, j'essay de recuperer le nom de ma machine par Winsock (si vous connaisez un proceder plus simpl


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,198 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales