Je ne peux pas me connecter à mon programme de serveur via les sockets.
Mon programme de serveur fonctionne bien avec les connexions telnet.
Je ne peux pas repérer le problème, aucune idée?
int main(void){ int sockfd =0; char recvBuff[1024]; struct sockaddr_in serv_addr; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons( 8888 ); memset(recvBuff, '0',sizeof(recvBuff)); if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("\n Error : Could not create socket \n"); return 1; } memset(&serv_addr, '0', sizeof(serv_addr)); if(inet_pton(AF_INET,"192.168.0.1", &serv_addr.sin_addr)<=0) { printf("\n inet_pton error occured\n"); return 1; } if( connect(sockfd, (struct sockaddr *)&serv_addr.sin_addr, sizeof(serv_addr.sin_addr)) < 0) { printf("\n Error : Connect Failed \n"); return 1; } return 0; }
Essayer:
if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { printf("\n Error : Connect Failed \n"); return 1; }
Voici un bon tutoriel
[Veuillez également prendre en compte les conseils importants donnés dans la réponse de J Carl Zeigler ici !]
Vous voulez supprimer cette ligne
memset(&serv_addr, '0', sizeof(serv_addr));
comme il écrase juste ce que vous avez initialisé serv_addr
avant en faisant ceci:
serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons( 8888 );
Juste deviner que vous vouliez probablement mettre à zéro le membre de l’adresse cible que vous essayez de définir ici:
if(inet_pton(AF_INET,"192.168.0.1", &serv_addr.sin_addr)<=0)
Cela aurait alors ressemblé à ceci:
memset(&serv_addr.sin_addr, 0, sizeof(serv_addr.sin_addr));
(notez l'utilisation de la valeur 0
au lieu du caractère '0'
, qui est probablement la valeur 48
si vous utilisez ASCII sur votre système)
Toute méthode de mise à zéro avant n'est pas nécessaire, car inet_pton()
prend soin de définir correctement le membre sin_addr
.
Et la prochaine chose que vous voudrez peut-être faire est d'apprendre à utiliser un débogueur pour résoudre ces problèmes stxxid vous-même.