Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2485 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] problème prog réseau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] problème prog réseau

n°1049811
nodus
Posté le 16-04-2005 à 19:08:11  profilanswer
 

C'est un problème bête mais je suis en train de faire un petit prog réseau et j'obtiens cette erreur:
 


Service 20000 demande a debian
Type d adresse 2 ; descripteur de socket 3
Reponse : message recu$ûÿ¿1 Mon J


 
Pourquoi ne reçois-je pas simplement "message reçu" ?
 

Code :
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <netdb.h>
  6. #include <stdlib.h>
  7. #define BUFSIZE 200
  8. #define NORMAL 0
  9. int main(int argc, char ** argv)
  10. {
  11. int s;
  12. int len;
  13. struct sockaddr_in sa;
  14. struct hostent * hp;
  15. struct servent * sp;
  16. char * myname;
  17. char buf[BUFSIZE];
  18. char *host;
  19. myname=argv[0];
  20. if(argc!=2){
  21.  fprintf(stderr,"Usage : %s serveur\n",myname);
  22.  exit(EXIT_FAILURE);
  23. }
  24. host=argv[1];
  25. if((hp = gethostbyname(host))==NULL){
  26.  fprintf(stderr,"%s : %s serveur inconnu\n",myname,host);
  27.  exit(EXIT_FAILURE);
  28. }
  29. bcopy((char*)hp->h_addr,(char*)&sa.sin_addr,hp->h_length);
  30. sa.sin_family = hp->h_addrtype;
  31. sa.sin_port=20000;
  32. if((s=socket(hp->h_addrtype,SOCK_STREAM,0))<0){
  33.  perror("socket" );
  34.  exit(EXIT_FAILURE);
  35. }
  36. fprintf(stdout,"Service %d demande a %s\n",sa.sin_port,host);
  37. fprintf(stdout,"Type d adresse %d ; descripteur de socket %d \n",sa.sin_family,s);
  38. if(connect(s,(struct sockaddr*)&sa,sizeof(sa))<0){
  39.  perror("connect" );
  40.  exit(EXIT_FAILURE);
  41. }
  42. recv(s,buf,BUFSIZE,NORMAL);
  43. fprintf(stdout,"Reponse : %s\n",buf);
  44. close(s);
  45. exit(EXIT_SUCCESS);
  46. }


 
 

Code :
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <netdb.h>
  6. #include <stdlib.h>
  7. #define BUFSIZE 200
  8. #define NORMAL 0
  9. #define BACKLOG 1
  10. #define MAXHOSTNAME 32
  11. #define MAXREQ 5
  12. void sendmess(int sock);
  13. int main(int argc, char ** argv)
  14. {
  15. int s,t;
  16. int i, count_req;
  17. struct sockaddr_in sa;
  18. struct sockaddr_in isa;
  19. struct hostent *hp;
  20. struct hostent *sp;
  21. char localhost[MAXHOSTNAME+1];
  22. sa.sin_port=20000;
  23. gethostname(localhost,MAXHOSTNAME);
  24. hp=gethostbyname(localhost);
  25. bcopy(hp->h_addr,(char*)&sa.sin_addr,hp->h_length);
  26. sa.sin_family=hp->h_addrtype;
  27. if((s = socket(hp->h_addrtype,SOCK_STREAM,0))<0){
  28.  perror("Serveur : probleme creation socket\n" );
  29.  exit(EXIT_FAILURE);
  30. }
  31. if(bind(s,(struct sockaddr *)&sa,sizeof(sa))<0){
  32.  fprintf(stderr,"Serveur : probleme creation lien\n" );
  33.  exit(EXIT_FAILURE);
  34. }
  35. listen(s,BACKLOG);
  36. fprintf(stdout,"Service %d sur %s en attente\n", sa.sin_port,localhost);
  37. fprintf(stdout,"type d adresse : %d\n",sa.sin_family);
  38. for(count_req = 0; count_req <= MAXREQ; count_req++){
  39.  t=accept(s,(struct sockaddr *)&isa,&i);
  40.  fprintf(stdout,"Requete %d\n",count_req);
  41.  sendmess(t);
  42.  close(t);
  43. }
  44. close(s);
  45. fprintf(stdout,"in du service pour %s\n", localhost);
  46. return(EXIT_SUCCESS);
  47. }
  48. void sendmess(int sock)
  49. {
  50. char * buf = "message recu";
  51. send(sock,buf,strlen(buf),NORMAL);
  52. }

mood
Publicité
Posté le 16-04-2005 à 19:08:11  profilanswer
 

n°1049814
boulax
Inserer phrase hype en anglais
Posté le 16-04-2005 à 19:12:18  profilanswer
 

Y'a peut-etre pas de \0 dans ton buffer


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1049817
nodus
Posté le 16-04-2005 à 19:26:59  profilanswer
 

Arf, j'ai toujours eu du mal avec les char...
 
Merci ;)

n°1049818
Tarabiscot​e
Posté le 16-04-2005 à 19:28:59  profilanswer
 

strlen ne compte pas le '\0' final donc faut faire strlen(buf) + 1.

n°1049820
boulax
Inserer phrase hype en anglais
Posté le 16-04-2005 à 19:30:15  profilanswer
 

et initialiser le contenu du buffer à 0. (memcpy ou bzero)


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1049825
Taz
bisounours-codeur
Posté le 16-04-2005 à 19:35:49  profilanswer
 

boulax a écrit :

et initialiser le contenu du buffer à 0. (memcpy ou bzero)


ni l'un ni l'autre
 
par contre memset
 
ou tout simplement = ""

n°1049827
boulax
Inserer phrase hype en anglais
Posté le 16-04-2005 à 19:38:00  profilanswer
 

Taz a écrit :

ni l'un ni l'autre
 
par contre memset
 
ou tout simplement = ""


 
memset voila. spa bien bzero ?


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1049828
Taz
bisounours-codeur
Posté le 16-04-2005 à 19:38:45  profilanswer
 

nan, spa standard et complètement obsolète.

n°1049837
cricri_
Posté le 16-04-2005 à 20:06:50  profilanswer
 

bzero n'est qu'une macro utilisant memset en général ;)

n°1049841
nodus
Posté le 16-04-2005 à 20:09:29  profilanswer
 

memset est de plus bas niveau ?

mood
Publicité
Posté le 16-04-2005 à 20:09:29  profilanswer
 

n°1049843
ToxicAveng​er
Posté le 16-04-2005 à 20:13:01  profilanswer
 

boulax a écrit :

et initialiser le contenu du buffer à 0. (memcpy ou bzero)


 
ou calloc :o


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] problème prog réseau

 

Sujets relatifs
problème d'équivalence ?problème d'équivalence ?
problème d'envoi d'emailproblème d'équivalence
probleme de config de xmlspy avec le module fop[Windev] Problème ouverture projet
problème d'affichage site sous Macun ti probleme de math
probleme de javascript avec tomcatprobleme de supression te d'update de base
Plus de sujets relatifs à : [C] problème prog réseau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR