Comment se connecter au socket (c)?

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.