Se connecter / S'enregistrer
Votre question

Client - Serveur Daytime

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
27 Janvier 2011 14:33:54

Bonjour à tous, voila dans le cadre de mes études je devais programmer un serveur-client daytime en C. Mon programme fonctionne en local en utilisant 127.0.0.1 mais j'aimerais comprendre pourquoi lorsque j'utilise ma réel adresse IP mon serveur ne reçoit pas la requete merci
PS:Je ne sais pas si vous aurez besoin du code, je ne le met pas pour le moment pour ne pas faire un premier poste trop long cependant si vous souhaitez le voir je le mettrais; merci de vos reponses

Autres pages sur : client serveur daytime

27 Janvier 2011 23:50:48

Bonsoir,

Oui ça serrait bien avec le code :) 

Comme ça il y a deux soucis qui me viennent en tête:
  • un problème de firewall qui bloque le port sur le serveur ( ou de la translation d'adresse )
  • un problème de représentation des données ( big endian/little endian ) venant du fait que tu as oublié le htons pour le port ou pour des données quelconques
    m
    0
    l
    28 Janvier 2011 00:20:07

    Bonsoir et merci de ton aide voici les codes:

    client :
    1. #include <stdio.h>
    2.  
    3. #include <stdlib.h>
    4.  
    5.  
    6. #include <sys/types.h>
    7.  
    8. #include <sys/socket.h>
    9.  
    10. #include <netinet/in.h>
    11.  
    12. #include <arpa/inet.h>
    13.  
    14. #include <netdb.h>
    15.  
    16. #include <errno.h>
    17.  
    18. #include <string.h>
    19.  
    20. #include <time.h>
    21.  
    22. #define BUF_SIZE 1024
    23.  
    24. #define PORT 8081
    25.  
    26.  
    27.  
    28.  
    29. int main(int arc,char ** argv){
    30.  
    31. int off=0;
    32.  
    33.  
    34. int rc;
    35.  
    36.  
    37.  
    38.  
    39. int sock=socket(AF_INET,SOCK_DGRAM,0);
    40.  
    41. struct hostent *hostinfo=NULL;
    42.  
    43. struct sockaddr_in to={0};
    44.  
    45. int tosize=sizeof(to);
    46.  
    47. //const char * hostname="127.0.0.1";
    48.  
    49. const char * hostname="90.++.++.134";
    50.  
    51. char buffer[BUF_SIZE]="";
    52.  
    53. char buffer2[BUF_SIZE]="";
    54.  
    55. char * nom=getenv("USERNAME");
    56.  
    57. strcat(buffer,nom);
    58.  
    59.  
    60.  
    61. printf("ADRESSE ENTREE\n");
    62.  
    63. hostinfo=gethostbyname(hostname);
    64.  
    65. printf("ADRESSE RESOLUE!\n\n\n");
    66.  
    67.  
    68.  
    69.  
    70.  
    71. to.sin_addr=*(struct in_addr *) hostinfo->h_addr;
    72.  
    73. to.sin_port=htons(PORT);
    74.  
    75. to.sin_family=AF_INET;
    76.  
    77.  
    78. printf("ENVOIE DE LA REQUETE...\n");
    79.  
    80. int n=sendto(sock,buffer,strlen(buffer),0,(struct sockaddr *)&to,tosize);
    81.  
    82.  
    83.  
    84. printf("REQUETE ENVOYEE\n\n\n");
    85.  
    86. printf("ATTENTE DE REPONSE...\n\n");
    87.  
    88. n=recvfrom(sock,buffer2,BUF_SIZE-1,0,(struct sockaddr *)&to,&tosize);
    89.  
    90. printf("%s\n",buffer2);
    91.  
    92. printf("REPONSE RECU !\n\n\nFERMETURE\n");
    93.  
    94. buffer[n]='\0';
    95.  
    96.  
    97.  
    98. close(sock);
    99.  
    100. return 1;
    101.  
    102. }


    serveur :
    1. #include <stdio.h>
    2.  
    3. #include <stdlib.h>
    4.  
    5.  
    6. #include <sys/types.h>
    7.  
    8. #include <sys/socket.h>
    9.  
    10. #include <netinet/in.h>
    11.  
    12. #include <arpa/inet.h>
    13.  
    14.  
    15. #include <netdb.h>
    16.  
    17. #include <errno.h>
    18.  
    19. #include <string.h>
    20.  
    21. #include <time.h>
    22.  
    23. #define BUF_SIZE 1024
    24.  
    25. #define PORT 8081
    26.  
    27. int main(int arc, char ** argv){
    28.  
    29. int off=0;
    30.  
    31.  
    32.  
    33.  
    34.  
    35.  
    36. int sock=socket(AF_INET,SOCK_DGRAM,0);
    37.  
    38. if(sock<0){
    39.  
    40. perror("socket()");
    41.  
    42. exit(errno);
    43.  
    44. }
    45.  
    46. struct sockaddr_in sin={0};
    47.  
    48. sin.sin_addr.s_addr=htonl(INADDR_ANY);
    49.  
    50. sin.sin_port=htons(PORT);
    51.  
    52. sin.sin_family=AF_INET;
    53.  
    54.  
    55.  
    56. int rc=bind(sock,(struct sockaddr *)&sin,sizeof sin);
    57.  
    58.  
    59.  
    60. char buffer[BUF_SIZE];
    61.  
    62.  
    63.  
    64.  
    65.  
    66. struct hostent *hostinfo=NULL;
    67.  
    68. struct sockaddr_in from={0};
    69.  
    70. int fromsize=sizeof(from);
    71.  
    72.  
    73.  
    74.  
    75.  
    76.  
    77.  
    78.  
    79.  
    80.  
    81.  
    82. rc=1;
    83.  
    84.  
    85.  
    86. printf("Serveur demarre !!\n\n");
    87.  
    88. while(1){
    89.  
    90.  
    91.  
    92.  
    93.  
    94. rc=recvfrom(sock,buffer,BUF_SIZE-1,0,(struct sockaddr *)&from,&fromsize);
    95.  
    96. printf("jai recu!\n");
    97.  
    98.  
    99.  
    100. char *hote;
    101.  
    102. hote=inet_ntoa(from.sin_addr);
    103.  
    104. time_t timestamp;
    105.  
    106. struct tm * t;
    107.  
    108. timestamp=time(NULL);
    109.  
    110. char * buffer2=ctime(&timestamp);
    111.  
    112. printf("%s est connecte %s depuis %s\n",buffer,buffer2,hote);
    113.  
    114. sendto(sock,buffer2,strlen(buffer2),0,(struct sockaddr *)&from,fromsize);
    115.  
    116.  
    117.  
    118.  
    119.  
    120. }
    121.  
    122.  
    123.  
    124.  
    125. close(sock);
    126.  
    127. return 1;
    128.  
    129.  
    130.  
    131. }


    Pour ce qui est du parfeu j'ai ouvert le port 8081 en udp pour mon adresse locale le 192.168.1.10
    Merci a toi!
    m
    0
    l
    Tom's guide dans le monde
    • Allemagne
    • Italie
    • Irlande
    • Royaume Uni
    • Etats Unis
    Suivre Tom's Guide
    Inscrivez-vous à la Newsletter
    • ajouter à twitter
    • ajouter à facebook
    • ajouter un flux RSS