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 :

[Reseau] probleme client/serveur TCP LInux


Sujet :

Réseau C

  1. #1
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut [Reseau] probleme client/serveur TCP LInux
    Bonjour, lors d'un cours on a du faire l'exemple suivant :
    Client TCP
    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
     
    /**************************
    **********CLIENT TCP******
    ***************************/
     
    #include<errno.h>
    #include<stdio.h>
    #include<sys/types.h>
    #include<sys/socket.h>
    #include<netinet/in.h>
    #include<netdb.h>
     
    #define PORTS 2058;
     
    int Construit_Adresse(struct sockaddr_in *adresse)
    {
    	adresse->sin_family=AF_INET;
    	adresse->sin_port=PORTS;
    	adresse->sin_addr.s_addr=htonl(INADDR_ANY);
    }
     
    int Construit_Adresse_Serveur(struct sockaddr_in *adresse)
    {
    	adresse->sin_family = AF_INET;
    	adresse->sin_port =PORTS;
    	adresse->sin_addr.s_addr = inet_addr("127.0.0.1");
    }
     
    int main(int argc, char *argv) 
    {
    	struct hostent *h;
    	struct sockaddr_in adr_s,adr_c;
    	char buf[20];
    	int sock;
    	/* Création socket */
    	sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    	/* Attachement socket */
    	Construit_Adresse(&adr_c);
    	bind(sock,(struct sockaddr *) &adr_c, sizeof(adr_c));
    	Construit_Adresse_Serveur(&adr_s);
    	write(sock,"Test de connexion",20);
    	close (sock);
    }
    et Serveur TCP
    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
    /**************************
    **********SERVEUR TCP******
    ***************************/
     
    #include<stdio.h>
    #include<sys/types.h>
    #include<sys/socket.h>
    #include<netinet/in.h>
    #include<netdb.h>
     
    #define PORTS 2058;
     
    int Construit_Adresse(struct sockaddr_in *adresse)
    {
    	adresse->sin_family=AF_INET;
    	adresse->sin_port=PORTS;
    	adresse->sin_addr.s_addr=htonl(INADDR_ANY);
    }
     
    int main() 
    {
    	int namelen, sock,nsock;
    	char buf[20];
    	struct sockaddr_in adr_s,adr_c;
    	int lg;
    	pid_t pid;
     
    	/* Création socket */
    	sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    	/* Attachement socket */
    	Construit_Adresse(&adr_s);
    	bind(sock,(struct sockaddr *) &adr_s, sizeof(adr_s));
    	listen (sock,5);
     
    	while (1)
    	{
    		lg= sizeof(adr_c);
    		nsock = accept(sock,(struct sockaddr *) &adr_c, &lg);
    		pid=fork();
    		if (pid ==0)
    		{
    			close(sock);
    			read(nsock,buf,20);
    			printf("Chaine recue : %s\n", buf);
    			close(nsock);
    			exit(0);
    		}
    	}
    }
    Mon probleme est que lorsque je lance le serveur puis le client rien ne se passe sur le serveur !!!

    On a fait un exmple en UDP et la sa fonctionne !! quelqu'un pourrait t'il m'aider sur mon erreur ??

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par jmjmjm
    Mon probleme est que lorsque je lance le serveur puis le client rien ne se passe sur le serveur !!!

    On a fait un exmple en UDP et la sa fonctionne !! quelqu'un pourrait t'il m'aider sur mon erreur ??
    Il faudrait d'abord résoudre tous ces warnings...

    En compilant avec :
    -Wall -Wextra -O2
    Citation Envoyé par Client
    client.c: In function ‘Construit_Adresse_Serveur’:
    client.c:25: warning: implicit declaration of function ‘inet_addr’
    client.c: At top level:
    client.c:29: warning: second argument of ‘main’ should be ‘char **’
    client.c: In function ‘main’:
    client.c:40: warning: implicit declaration of function ‘write’
    client.c:41: warning: implicit declaration of function ‘close’
    client.c:32: warning: unused variable ‘buf’
    client.c:30: warning: unused variable ‘h’
    client.c:28: warning: unused parameter ‘argc’
    client.c:28: warning: unused parameter ‘argv’
    client.c: In function ‘Construit_Adresse’:
    client.c:19: warning: control reaches end of non-void function
    client.c: In function ‘Construit_Adresse_Serveur’:
    client.c:26: warning: control reaches end of non-void function
    client.c: In function ‘main’:
    client.c:42: warning: control reaches end of non-void function
    Citation Envoyé par Serveur
    serv.c: In function ‘main’:
    serv.c:38: warning: pointer targets in passing argument 3 of ‘accept’ differ in signedness
    serv.c:39: warning: implicit declaration of function ‘fork’
    serv.c:42: warning: implicit declaration of function ‘close’
    serv.c:43: warning: implicit declaration of function ‘read’
    serv.c:46: warning: implicit declaration of function ‘exit’
    serv.c:46: warning: incompatible implicit declaration of built-in function ‘exit’
    serv.c:22: warning: unused variable ‘namelen’
    serv.c: In function ‘Construit_Adresse’:
    serv.c:18: warning: control reaches end of non-void function
    Jc

    PS: Tu essayeras aussi connect à la place de bind du côté du client... Cela fonctionne mieux sous TCP

  3. #3
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Salut,
    Pas de doute le programme a besoin de débug. C'est probablement le but de l' exercice.

    En outre Construit_Adresse() a besoin d' attention: non seulement il n' y a pas besoin de pousser une structure sur le stack juste pour remplir 3 variables, mais encore elle n'est appelée qu'une fois -modularité injustifiée- et pire que tout elle remplit les champs "comme un port". Du coup je n'ai pas encore regardé le code du client.

    Tout ceci en plus de ce qu'a pointé fearyourself. Si ça compilait proprement ça serait déjà pas mal.
    Y a du boulot il a l' air bien cet exercice ...

  4. #4
    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 Lunixinclar
    En outre Construit_Adresse() a besoin d' attention: non seulement il n' y a pas besoin de pousser une structure sur le stack juste pour remplir 3 variables,
    Je ne vois pas trop le problème. C'est fait avec un pointeur de structure, ce qui est la Bonne Méthode.
    mais encore elle n'est appelée qu'une fois -modularité injustifiée- et pire que tout elle remplit les champs "comme un port".
    Jeu de mot involontaire (porc ?). Ca allège la lecture du code, ce qui n'est pas si mal...
    Pas de Wi-Fi à la maison : CPL

  5. #5
    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 jmjmjm
    Bonjour, lors d'un cours on a du faire l'exemple suivant :
    Client TCP
    Mais c'est quoi ça ?
    Pour bricoler les sockets, il faut connaitre le C un minium quand même...

    Et pourquoi un S à PORT ?

    Pour le reste, c'est une catastrophe. Tu programmes au hasard. Dans un client, il n'y a pas d'"adresse client", ça se fait tout seul. Seule l'adresse du serveur compte... Il faut comprendre ce que tu fais, sinon tu fais n'importe quoi... De plus, le code n'est pas conforme à POSIX.1 (c'est pas write(), mais send() etc.) et tu prétends avoir fait ça en UDP ? avec un write() ? Arf !

    Une modeste initiation au réseaux et au sockets. A la fin de l'article, un lien vers un cours complet.

    http://emmanuel-delahaye.developpez.com/reseaux.htm
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Non non je ne me suis pas servi de ce code pour l'UDP !! c'etait un autre programme!!

    Apres j'ai en effet oublié la fonction connect() coté client maintenant ca marche !!

    Je ne sais pas si le programme est catastrophique mais moi j'avais un programme a trou ou je devais juste cree une fonction Construit_Adresse()
    d'ou l'utilité d'avoir une fonction appellée qu'une fois
    pareil pour Construit_Adresse_Serveur.

    pour le coté exercice c'est donc fini mais par contre je veux bien quelque conseil :
    our le reste, c'est une catastrophe. Tu programmes au hasard. Dans un client, il n'y a pas d'"adresse client", ça se fait tout seul. Seule l'adresse du serveur compte... Il faut comprendre ce que tu fais, sinon tu fais n'importe quoi... De plus, le code n'est pas conforme à POSIX.1 (c'est pas write(), mais send() etc.) et tu prétends avoir fait ça en UDP ? avec un write() ? Arf !
    pour passer au norme et pas faire des truc qui serve pas (Seule l'adresse du serveur compte)

  7. #7
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    j'ai donc corrigé mon client de cette facon :
    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
    /**************************
    **********CLIENT TCP******
    ***************************/
     
    #include<errno.h>
    #include<stdio.h>
    #include<sys/types.h>
    #include<sys/socket.h>
    #include<netinet/in.h>
    #include<netdb.h>
     
    #define PORTS 2058;
     
    int Construit_Adresse(struct sockaddr_in *adresse)
    {
    	adresse->sin_family=AF_INET;
    	adresse->sin_port=PORTS;
    	adresse->sin_addr.s_addr=htonl(INADDR_ANY);
    }
     
    int Construit_Adresse_Serveur(struct sockaddr_in *adresse)
    {
    	adresse->sin_family = AF_INET;
    	adresse->sin_port =PORTS;
    	adresse->sin_addr.s_addr = inet_addr("127.0.0.1");
    }
     
    int main(int argc, char *argv) 
    {
    	struct hostent *h;
    	struct sockaddr_in adr_s,adr_c;
    	char buf[20];
    	int sock;
    	/* Création socket */
    	sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    	/* Attachement socket */
    	Construit_Adresse(&adr_c);
    	bind(sock,(struct sockaddr *) &adr_c, sizeof(adr_c));
    	Construit_Adresse_Serveur(&adr_s);
    	connect (sock, &adr_s, sizeof(adr_s));
    	write(sock,"Test de connexion",20);
    	close (sock);
    }
    Si j'ai compris tes conseil Emmanuel Delahaye je peux virer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	Construit_Adresse(&adr_c);
    	bind(sock,(struct sockaddr *) &adr_c, sizeof(adr_c));
    c ca ??

  8. #8
    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 jmjmjm
    Si j'ai compris tes conseil Emmanuel Delahaye je peux virer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	Construit_Adresse(&adr_c);
    	bind(sock,(struct sockaddr *) &adr_c, sizeof(adr_c));
    c ca ??
    Je ne connais pas les fonctions par coeur, mais je t'ai passé un lien qui explique ce qu'il faut faire dans les 4 cas (client/serveur/UDP/TCP). Tu l'as lu ? Je n'en sais pas plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(sock,"Test de connexion",20);
    Déjà dit, mais c'est pas write() mais send()
    Pourquoi 20 ?

    Lire ceci d'urgence :

    http://www.developpez.net/forums/sho...23&postcount=2

    et corriger le code.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    oui et d'apres ce que j'ai compris je peux enelever ca ! faut que je test ! mais la j'ai pas linux sous la main merci pour le liens il est plus complet que celui que j'avais et surtout que ce cours de m****

  10. #10
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    et faut aussi que je change read et write (pris dans le cours )
    en receive() send() !!!

  11. #11
    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 jmjmjm
    oui et d'apres ce que j'ai compris je peux enelever ca ! faut que je test ! mais la j'ai pas linux sous la main merci pour le liens il est plus complet que celui que j'avais et surtout que ce cours de m****
    Ca marche sous Windows (mon code est portable).
    Pas de Wi-Fi à la maison : CPL

  12. #12
    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 jmjmjm
    en receive()
    recv() (j'avais un bug dans mon article, je l'ai corrigé ce matin).
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489

  14. #14
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Pourquoi me poste tu un liens vers Write ?? on vient de me dire que c'etait send

  15. #15
    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
    Pourquoi ? La fonction POSIX.1 pour écrire dans un socket(), c'est send() en TCP et sendto() et UDP. Pourquoi chercher à court-circuiter les bonnes pratiques et à écrire du code délibérément non portable ? Esprit rebelle ?

    "We are the Borgs."
    "Resistance is futile."
    "You will be assimilated."
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Je viens de me rendre compte que dans le bouqin que je viens de recevoir "Programmation systeme en C sous linux" il utilise aussi Write et read pour communiquer avec les socket

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce qui est tout sauf portable.
    Ça marche sous les systèmes unixoïdes car les sockets y sont des descripteurs (ce qui permet à select() de marcher à la fois avec les sockets et les flux standards), mais ça ne marchera pas sous Windows par exemple, où les sockets ne sont pas des descripteurs mais des handles... (c'est pourquoi select() sous Windows marche sur des sockets, mais pas sur des descripteurs).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    ok merci pour cette precision de toute facon j'etais parti sur les exemple d'Emmanuel Delahaye donc j'utilise send() recv()

  19. #19
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Citation Envoyé par Delahaye
    Je ne vois pas trop le problème. C'est fait avec un pointeur de structure, ce qui est la Bonne Méthode. Ca allège la lecture du code, ce qui n'est pas si mal...
    Si la lecture du code en était allégée quelqu'un pourrait certainement justifier le
    adresse->sin_port=PORTS;
    et le
    adresse->sin_addr.s_addr=htonl(INADDR_ANY);
    C'est du même niveau que le bind chez le client

    Citation Envoyé par Delahaye
    Pourquoi ? La fonction POSIX.1 pour écrire dans un socket(), c'est send() en TCP et sendto() et UDP.
    Pourquoi chercher à court-circuiter les bonnes pratiques et à écrire du code délibérément non portable ? Esprit rebelle ?

    "We are the Borgs."
    "Resistance is futile."
    "You will be assimilated."
    C'est ton avis, je le respecte. Le mien est qu'il existe plusieurs fonctions pour la même tâche et qu'il serait malhonnète de demander d'ignorer stérilement write().
    Au vu des includes je n'ai pas eu l'impression que le prof s'intéressait à windows: peut-être qu'au fond, si winsock2.h n'est pas mentionné, s'il n' y a pas de WSAStartup(), et qu'il y a write, alors c'est que le prof aurait choisi d'enseigner l'informatique, pas juste windows?

  20. #20
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Faux, il a choisi d'enseigner juste UNIX, pas l'informatique.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [C] Probleme avec socket client-serveur TCP
    Par LinuxUser dans le forum Réseau
    Réponses: 33
    Dernier message: 15/05/2007, 22h26
  2. [reseau] performances client/serveur
    Par orelero dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 10/05/2006, 16h36
  3. [Reseau] Dialogue client-serveur
    Par Nasky dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 08/08/2005, 15h07
  4. Crére un client/serveur sous linux en TCP
    Par Darknicosh dans le forum Développement
    Réponses: 11
    Dernier message: 20/06/2005, 10h19
  5. client/serveur tcp/ip en c sous unix
    Par oclone dans le forum Développement
    Réponses: 8
    Dernier message: 19/04/2005, 18h55

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