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 :

Questions sur les socket


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut Questions sur les socket
    Bonjour, j'ai plusieurs questions sur les socket :
    Deja comment on sait le port de son ordi ? (mon ordi= le serveur)
    le client peut envoyer par socket au serveur ? : une variable repertoire=opendir("C:\\........................"); et que le serveur grace a cette variable affiche le contenue du repertoir du client ?
    Peut on envoyer un fichier de client a serveur avec une variable fichier=fopen("fichier.txt"); ??

    Voila a peu pres toutes mes questions

  2. #2
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Deja comment on sait le port de son ordi ? (mon ordi= le serveur)
    Ca commence mal . Un ordinateur n'a pas de port ( pour une socket ). Un port c'est quelquechose lié à un protocole de niveau 4 ( tcp ou udp ) et qui permet de définir une connection

    le client peut envoyer par socket au serveur ? : une variable repertoire=opendir("C:\\........................"); et que le serveur grace a cette variable affiche le contenue du repertoir du client ?
    Oui et non. Directement non, tu ne peux faire transiter par des socket que des données, pas de "variables". Ensuite il existe des solutions de plus haut niveau qui permettent de faire ce genre de chose comme corba. Basiquement, ce que tu peux faire, c'est envoyer via un socket la liste des fichiers / répertoires

    Peut on envoyer un fichier de client a serveur avec une variable fichier=fopen("fichier.txt"); ??
    Comme si dessus directemetn ce n'est pas possible. Mais tu peux envoyer el contenu de ce fichier sur le réseau.

  3. #3
    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
    Citation Envoyé par lapras123
    Bonjour, j'ai plusieurs questions sur les socket :
    Deja comment on sait le port de son ordi ? (mon ordi= le serveur)
    Ben le port c'est toi qui le choisit (entre 1025 et 65536)

    le client peut envoyer par socket au serveur ? : une variable repertoire=opendir("C:\\........................"); et que le serveur grace a cette variable affiche le contenue du repertoir du client ?
    Comment veut tu envoyer une variable via une socket. Reflechi un petit peu a ce que tu viens de demander. Tu peux faire comme cela si tu veux.

    Le client envoi le nom du repertoire au serveur, le serveur liste les fichiers, les envoi au client et le client les affiche.

    Peut on envoyer un fichier de client a serveur avec une variable fichier=fopen("fichier.txt"); ??

    Voila a peu pres toutes mes questions
    Exprime toi clairement s'il te plait.

    Tu veux envoyer un fichier?
    Pour envoyer un fichier, le client ouvre le fichier en lecture, il envoi le nom du fichier au serveur, le serveur crée un fichier et l'ouvre en ecriture. Le client envoi des blocs de 4096 octets au serveur (le client lit via fread), le serveur les ecrit dans son fichier via fwrite.
    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]

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Donc je dois mettre tout dans une variable char contenu[] qui contiendra mes infos ?
    Et sinon, c'est quoi le protocole de connection ?
    j'indique quoi comme numéro ?

  5. #5
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    Hello.

    j'ai ecrit mon premier petit client-server récemment.
    Je te conseilles de suivre l'un ou l'autre de ces 2 tutoriaux, ils m'ont beaucoup aidé:

    http://emmanuel-delahaye.developpez.com/reseaux.htm
    http://c.developpez.com/WalrusSock/

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Ok merci.
    Je peux donc choisir un port a 2000 pour mon client ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Voila je me suis fait un client identique a celui de la FAQ :
    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 <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
     
     
    int main(void)
    {
    WSADATA WSAdata;
    WSAStartup(MAKEWORD(2,0), &WSAdata);
    SOCKET sock;
    SOCKADDR_IN sin;
    char *buffer;
    sin.sin_addr.s_addr = inet_addr("ip");
    sin.sin_family = AF_INET;
    sin.sin_port = htons(6667);
    sock=socket(AF_INET, SOCK_STREAM, 0);
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
    recv(sock, buffer, sizeof(buffer), 0);
    closesocket(sock);
    WSACleanup();
    system("PAUSE");
    return 0;
    }

    et un 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
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
     
    int main(void)
    {
    WSADATA WSAdata;
    SOCKET sock;
    SOCKET csock;
    sock=socket(AF_INET, SOCK_STREAM, 0);
    SOCKADDR_IN sin;
    SOCKADDR_IN csin;
    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 size=sizeof(csin);
    csock=accept(sock, (SOCKADDR *)&sin, &size);
    if(csock != INVALID_SOCKET) {
    send(csock, "Hello world\r\n", 14, 0);
    }
    }
    system("PAUSE");
    return 0;
    }
    probleme : plein de linker error !
    Pourquoi ?

  8. #8
    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
    Recherche sur le forum, ce probleme a deja ete traité des tas de fois.
    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]

  9. #9
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Quel compilateur utilises tu ?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Dev C++

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 102
    Points : 118
    Points
    118
    Par défaut
    Sous Dev-C++ avec MinGW le #pragma comment ne fonctionne pas, il faut que tu retire cette kigne et que tu ajoute la lib dans les options de link du projet

    J'éspère que j'ai pu t'aider
    Pensez au tag , à la balise [Code] ainsi qu'au règles ! C'est pour le bien de tous !

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Merci ca marche. Maintenant, je voudrais que sur mon ecran de client.exe ca marque : Hello world

    Voici mes fichiers :

    -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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
     
     
    int main(void)
    {
    WSADATA WSAdata;
    WSAStartup(MAKEWORD(2,0), &WSAdata);
    SOCKET sock;
    SOCKADDR_IN sin;
    char buffer[255]="";
    sin.sin_addr.s_addr = inet_addr("mon_ip"); 
    sin.sin_family = AF_INET;
    sin.sin_port = htons(6667);
    sock=socket(AF_INET, SOCK_STREAM, 0);
    connect(sock, (SOCKADDR *)&sin, sizeof(sin));
    recv(sock, buffer, sizeof(buffer), 0);
    printf("Envoi de serveur : %s\n", buffer);
    closesocket(sock);
    WSACleanup();
    system("PAUSE");
    return 0;
    }
    Code 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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
     
     
     
    int main(void)
    {
    WSADATA WSAdata;
    SOCKET sock;
    SOCKET csock;
    sock=socket(AF_INET, SOCK_STREAM, 0);
    SOCKADDR_IN sin;
    SOCKADDR_IN csin;
    sin.sin_addr.s_addr = INADDR_ANY;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(65000);
    bind(sock, (SOCKADDR *)&sin, sizeof(sin));
    listen(sock, 0);
    while(1)
    {
    int size=sizeof(csin);
    csock=accept(sock, (SOCKADDR *)&sin, &size);
    if(csock != INVALID_SOCKET) {
    printf("un client se connecte !");
    send(csock, "Hello world\r\n", 14, 0);
    }
    }
    system("PAUSE");
    return 0;
    }
    Ca m'écrit rien
    ++

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par lapras123
    Merci ca marche. Maintenant, je voudrais que sur mon ecran de client.exe ca marque : Hello world

    Voici mes fichiers :

    -serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sin.sin_port = htons(6667);
    Code serveur :
    Tu as 2 serveurs ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sin.sin_port = htons(65000);
    Ca m'écrit rien
    ++
    Essaye déjà que les numéros de ports soient cohérent...

    Ensuite
    Ca pas le faire. Il faut cesser de programmer au hasard. Voilà où trouver la doc de chaque fonction :

    http://man.developpez.com/

    Lit la doc de chaque fonction et écrit du code intelligent. Si tu ne comprends pas quelque chose, pose des questions. Sur mon site j'ai montré une approche pas à pas. Je te conseille de faire pareil et de te concentrer sur un seul concept çà la fois...

    Commence par écrire un serveur sur le port 23 que tu contactes avec le client Telnet de ton système...
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    C'est bon j'ai réglé le probleme

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

Discussions similaires

  1. Questions sur les sockets (fonctions synchrones)
    Par azerty25 dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 29/06/2007, 00h57
  2. [debutant][Client-serveur] Question sur les sockets
    Par skwi6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 06/11/2006, 15h04
  3. Question sur les socket AF_UNIX
    Par Mr_Chut dans le forum Réseau
    Réponses: 3
    Dernier message: 10/06/2006, 11h42
  4. Encore une petite question sur les sockets...
    Par damien99 dans le forum MFC
    Réponses: 4
    Dernier message: 15/02/2006, 14h22
  5. [WinSock] Question sur les sockets (accept)
    Par Grey dans le forum MFC
    Réponses: 3
    Dernier message: 09/01/2006, 11h37

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