weed | voilou je j'arrive bien a me connecter a serveur.c et serveur.c me renvoie une response, mais lorsque je veux envoyer un message de client -> serveur, je pensais qu'il suffisait d'inversait les send et recv avec client. et serveur.c
j'ai retiré les retour pour que le code soit plus court pour vous montrer.
serveur.c
Code :
- int sockfd, new_fd, numbytes; /* Ecouter sock_fd, nouvelle connection sur new_fd */
- struct sockaddr_in my_addr; /* Adresse */
- struct sockaddr_in their_addr; /* Adresse du connecté */
- int sin_size;
- char buf[MAXDATASIZE];
- sockfd = socket(AF_INET, SOCK_STREAM, 0))
- my_addr.sin_family = AF_INET; /* host byte order */
- my_addr.sin_port = htons(MYPORT); /* short, network byte order */
- my_addr.sin_addr.s_addr = INADDR_ANY; /* auto-remplissage avec mon IP */
- bzero(&(my_addr.sin_zero), 8); /* zero pour le reste de struct */
- bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) ;
- listen(sockfd, BACKLOG);
- while(1)
- { /* main accept() loop */
- sin_size = sizeof(struct sockaddr_in);
- new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
- if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1)
- {
- perror("\nrecv_serveur\n" );
- exit(1);
- }
- buf[numbytes] = '\0';
- printf("\nReçu: %s",buf);
- close(new_fd);
- /*
- printf("\nvoie du msg, je suis sur serveur\n" );
- if (send(new_fd, "j envoie un message", 15, 0) == -1)
- {
- perror("send" );
- }
- close(new_fd);
- exit(0);
- close(new_fd);
- */
- while(waitpid(-1,NULL,WNOHANG) > 0); /* Nettoyage des processus fils */
- }
- }
|
client.c
(l'adresse est en donné en argument
Code :
- int main(int argc, char *argv[])
- {
- int sockfd, numbytes;
- char buf[MAXDATASIZE];
- struct hostent *he;
- struct sockaddr_in their_addr; /* Adresse de celui qui se connecte */
- if (argc != 2)
- {
- fprintf(stderr,"usage: client hostname\n" );
- exit(1);
- }
- printf("\n Etabilssement de la connexion sur le serveur %s",argv[1]);
- if ((he=gethostbyname(argv[1])) == NULL)
- { /* Info de l'hôte */
- herror("gethostbyname" );
- exit(1);
- }
- sockfd = socket(AF_INET, SOCK_STREAM, 0);
- their_addr.sin_family = AF_INET; /* host byte order */
- their_addr.sin_port = htons(PORT); /* short, network byte order */
- their_addr.sin_addr = *((struct in_addr *)he->h_addr);
- bzero(&(their_addr.sin_zero), 8); /* zero pour le reste de struct */
- connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)
- if (send(sockfd, "paquet", 6, 0) == -1)
- {
- perror("send" );
- }
- /*
- numbytes=recv(sockfd, buf, MAXDATASIZE, 0);
- buf[numbytes] = '\0';
- printf("\nReçu: %s",buf);
- */
- close(sockfd);
- return 0;
- }
|
lorsque j'essaie d'envoyer client -> serveur, recv de serveur.c me renvoit "recv_serveur : Transport endpoint is not connected"
sur google, http://www.google.com/search?q=%22 [...] put=search
j'ai vu : smap: getpeername failed: Transport endpoint is not connected
j'ai donc essayé d'utilisé cette fonction avant le listen de serveur.c :
Code :
- if( getpeername (sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr) ) == -1)
- {
- perror("\ngetpeername\n" );
- exit(1);
- }
|
je ne sais pas si resoudrait mon probleme de "Transport endpoint is not connected"
de plus lorsque j'esssaie de compiler, j'ai un probleme avec l'argument 3 :
Citation :
serveur.c: In function `main':
serveur.c:195: warning: passing arg 3 of `getpeername' makes pointer from integer without a cast
|
Message édité par weed le 29-05-2004 à 16:09:22
|