begin process at 2012 05 30 09:09:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Réseau & Internet

 > 

serveur / client


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

serveur / client

jeudi 3 juillet 2008 à 13:13:32 | serveur / client

the68

Bonjour à tous,

Voilà je débute dans la programmation en C; j'ai suivis attentivement un tutoriel sur le C pour avoir les bases, et là je me lance dans la création d'un serveur + client mais j'ai des petits soucis; voilà la source du serveur mais je n'arrive pas à le compiler,j'ai des erreurs avec les variables; comment faire?

Merci de vos réponses, et soyez indulgent avec moi, je débute

#include <cstdlib>
#include <iostream>
#include <winsock2.h>


void main()
{
  long port=0;
printf ("port?/n");
    scanf("%ld", port);
    printf("le port est %ld", port);  
    
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            = inet_addr("127.0.0.1");
sin.sin_family                = AF_INET;
sin.sin_port                = htons("%ld",port);

bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);

        while(true)
        {
            int sinsize = sizeof(csin);
            if((csock = accept(sock,(SOCKADDR *)&csin,&sinsize)) != INVALID_SOCKET)
            {
            send(csock,"Vous etes connectes\r\n127.0.0.1 sur le port %ld\r\n\r\n",port,0);
           
            }
        }

closesocket(sock);
WSACleanup();


    return EXIT_SUCCESS;
}

jeudi 3 juillet 2008 à 15:56:12 | Re : serveur / client

laurent1024

Membre Club
Bonjour.
Tu peux nous donner les messages d'erreurs que tu as ?
Si tu fais du C pur n'oublie pas que les variables doivent être déclarées en début de blocs et que le type booléen n'existe pas
Cdt
jeudi 3 juillet 2008 à 16:44:55 | Re : serveur / client

the68

Merci pour la réponse, j'ai déjà remarqué que j'ai oublié le "&" à la ligne printf("le port est %ld", port);
pour les erreurs voici le log, c'est en rapport avec les variables...



Compilateur: Default compiler
Exécution de  g++.exe...
g++.exe "H:\programmation\démarrage.cpp" -o "H:\programmation\démarrage.exe"    -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include"  -I"C:\Dev-Cpp\include\c++\3.4.2\backward"  -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32"  -I"C:\Dev-Cpp\include\c++\3.4.2"  -I"C:\Dev-Cpp\include"   -L"C:\Dev-Cpp\lib"
H:\programmation\démarrage.cpp:7: error: `main' must return `int'
H:\programmation\démarrage.cpp: In function `int main(...)':
H:\programmation\démarrage.cpp:25: error: invalid conversion from `const char*' to `u_short'
C:/Dev-Cpp/include/winsock2.h:609: error: too many arguments to function `u_short htons(u_short)'
H:\programmation\démarrage.cpp:25: error: at this point in file

Exécution terminée

A +
jeudi 3 juillet 2008 à 18:50:58 | Re : serveur / client

laurent1024

Membre Club
Réponse acceptée !
H:\programmation\démarrage.cpp:7: error: `main' must return `int' => remplacer le void main() par int main()
sin.sin_port   = htons("%ld",port); ==> sin.sin_port   = htons(port);
et transformer le long port; en unsignedshortint port;

Cdt
vendredi 4 juillet 2008 à 10:52:20 | Re : serveur / client

the68

Merci pour la réponse :)
unsignedshortint port ça marche comment et ça correspond à quoi? Parceque ça me fait toujours un bug H:\programmation\démarrage.cpp:8: error: `unsignedshortint' undeclared (first use this function. J'ai déjà fait des recherches sur le net, mais n'ai pas trouvé grand chose...
A+
vendredi 4 juillet 2008 à 11:01:39 | Re : serveur / client

laurent1024

Membre Club
Réponse acceptée !
unsignedshortint c'est en 3 mots c'est unsigned short int.
Désolé c'est le copier coller qui a déconné.
unsigned short int c'est le type du parametre qui est demandé dans le prototype de la fonction htons.
Cdt
vendredi 4 juillet 2008 à 14:07:50 | Re : serveur / client

the68

Bonjour =)
J'ai modifié tout celà maintenant, il n'y a plus d'erreurs de compilation, mais quand j'execute le programme, j'ai le droit à: Erreur de segmentation.
Quelqu'un peut m'expliquer??
vendredi 4 juillet 2008 à 14:34:51 | Re : serveur / client

laurent1024

Membre Club
Erreur de segmentation c'est quand tu utilise des pointeurs qui vont lire à a des endroits ou il n'ont pas le droit. Vérifie les paramètres et les valeurs de retour de tes fonctions, rajouter des printf pour pouvoir debugger ton prog.
Bon courage.

ps: recréé un post quand tu aura localiser le bug si tu n'arrives pas à le corriger.
vendredi 4 juillet 2008 à 23:30:29 | Re : serveur / client

the68

Merci pour la réponse;
j'ai maintenant le client et le serveur mais pourquoi le goto ne marche pas chez le serveur? parce que sa ne fonctionne qu'une fois (je n'arrive qu'à envoyer un seul message sans mettre le goto, avec le goto, il ne se passe rien sur le serveur...)


//serveur
#include <stdio.h>
#include <iostream.h>
#include <winsock.h>

int main()
{
debut:
char buffer[1024];
char buffer1[1024];
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);
   
SOCKET sock;
sock = socket(AF_INET,SOCK_STREAM,0);
   
SOCKADDR_IN sin;
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family      = AF_INET;
sin.sin_port        = htons(50);
listen(sock,100);
connect(sock,(SOCKADDR *)&sin,sizeof(sin));

   
int i = recv(sock,buffer,sizeof(buffer),0);
recv(sock,buffer,sizeof(buffer1),0);
goto debut;    

closesocket(sock);
WSACleanup();                     
                           
if (i != false)
    {
    cout << buffer << endl;
    cout << buffer1 << endl;
    }
            getchar();
}

------------------------------------------------------------------------------------------------------------------------------
//client

#include <cstdlib>
#include <iostream>
#include <winsock2.h>
#include <Windows.h>



using namespace std;

int main(int argc, char *argv[])
{
debut:
    printf("Commandes, en attente de connexion:\n");

char message[100];
long choix =0; 
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            = inet_addr("127.0.0.1");
sin.sin_family                = AF_INET;
sin.sin_port                = htons(50);

bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);

        while(true)
        {

            int sinsize = sizeof(csin);
            if((csock = accept(sock,(SOCKADDR *)&csin,&sinsize)) != INVALID_SOCKET)
            {
            send(csock,"Vous etes connecte\r\n",1024,0);
            printf("\n contenu du message? \n");
            gets(message);
            send(csock,message,1024,0);
            printf("venir au debut: 1? \n");
scanf("%ld", &choix) ;          
if(true);
goto debut;            
        
            }   
         }
closesocket(sock);
WSACleanup();

   
    system("PAUSE");
    return EXIT_SUCCESS;
}

samedi 5 juillet 2008 à 00:39:29 | Re : serveur / client

laurent1024

Membre Club
N'utilise pas les goto, c'est hyper déconseillé pour faire un code clair. Utilise plutôt un while : c'est plus "propre".
N'aurais pas tu inversé le code du serveur et du client ? car le premier code "serveur" resemble plus à un code client.
Il faut boucler uniquement sur les receive,
//debut: // <==pas ici
char buffer[1024];
char buffer1[1024];
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);
   
SOCKET sock;
sock = socket(AF_INET,SOCK_STREAM,0);
   
SOCKADDR_IN sin;
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family      = AF_INET;
sin.sin_port        = htons(50);
listen(sock,100);
connect(sock,(SOCKADDR *)&sin,sizeof(sin));

debut; // mais boucler a ce niveau, en remplacant ce goto par un while.
int i = recv(sock,buffer,sizeof(buffer),0);
recv(sock,buffer,sizeof(buffer1),0);
goto debut;    

1 2

Cette discussion est classée dans : port, serveur, sin, sock, ld


Répondre à ce message

Sujets en rapport avec ce message

[SOCKET]Tjrs le pb de recuperation du buffer recv() [ par enthaz ] Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur Socket, quand tu nous tiens ... [ par enthaz ] Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur [serveur]telecharger fichier [ par lombredudragon ] Avec les socket je debute et j'aimerais me faire un serveur en c ou c++ ou kan on se connect au port 23 par telnet on recoit automatiquement un fichie socket 100% CPU [ par fredo2009 ] Salut@tousVoilà la fonction que j'utilise pour savoir si un port est ouvert sur une ip:DWORD WINAPI connection( LPVOID Param ) { struct config * conf à vos sockets, prêt, GO [ par mimou20052005 ] à vos sockets, prêt, GO Bon voila les gars j'ai enfin pu réaliser un client et un serveur en C++ (win 32 console application), mais j'ai un petit prob [C] Scanner de port utilise socket version linux [ par firemax ] Salut :) J'ai une erreur de segmentation et je n'est pas la moindre idée d'ou ca peut venir :( Je n'est aucun warning lors de la compilation mais l prb a la compilation vous vc++ [ par shadow1779 ] Bonjour,j'ai tenté de faire un programme en C utilisant les sockets, la personne qui lance son programme choisi elle meme l'ip et le port a se connect client serveur echange de donne [ par bapdur ] voici la version dun client et dun serveur que je fais pour un jeu mais les donnes son envoyer en continu jaimerais aire en sorte que si je tape un ca Erreur compilation, Requette pour Connaitre le premier port ouvert..... [ par wizard512 ] Bonsoir,Je souhaiterais avoir un peu d'aide si possible,pour finir de réalisé un petit programme en c,Car j'ai rencontré des problè Probleme Serveur C++ [ par ipascual ] Bonjour a tous,Je suis en train de faire un serveur en C++, qui marche. Je l`ai deja teste, et tout, el en generale il n`y a pas de problemes...L`uniq


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 0,640 sec (4)

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