Erreur de réception dans UDP: connexion refusée

J’essaie d’envoyer une chaîne HI à un serveur via UDP dans un port particulier, puis de recevoir une réponse. Cependant, après avoir essayé d’obtenir la réponse à l’aide de recvfrom (), j’étais bloqué dans un état bloquant. J’ai essayé d’utiliser UDP connecté mais j’ai eu:

Erreur de réception dans UDP: connexion refusée

Quelles pourraient en être les raisons? Le serveur n’est pas sous mon contrôle, mais je sais qu’il fonctionne correctement.

J’ai ajouté le code

int sockfdudp; char bufudp[MAXDATASIZE], port[6]; struct addrinfo hints, *servinfo, *p; struct sockaddr_storage addr; int rv; char s[INET6_ADDRSTRLEN]; int bytes_recv, bytes_sent; socklen_t len; scanf("%s",port); printf("UDP Port: %s \n", port); // Start connecting to datagram server memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; if ((rv = getaddrinfo(SERVER_NAME, port, &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); return 1; } // loop through all the results and make a socket for(p = servinfo; p != NULL; p = p->ai_next) { if ((sockfdudp = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { perror("Creating datagram socket"); continue; } if (connect(sockfdudp, p->ai_addr, p->ai_addrlen) == -1) { close(sockfdudp); perror("Connecting stream socket"); continue; } break; } if (p == NULL) { fprintf(stderr, "ClientUDP: failed to bind socket\n"); return 2; } freeaddrinfo(servinfo); if ((bytes_sent = sendto(sockfdudp, UDP_MSG, strlen(UDP_MSG), 0, p->ai_addr, p->ai_addrlen)) == -1) { perror("ClientUDP: Error sending data"); exit(1); } printf("Data %s sent\n", UDP_MSG ); len = sizeof(struct sockaddr_storage); if ((bytes_recv = recvfrom(sockfdudp, bufudp, MAXDATASIZE-1, 0,(struct sockaddr*)&addr, &len)) == -1) { perror("Error receiving in UDP"); exit(1); } printf("Bytes recv %d\n", bytes_recv); bufudp[bytes_recv] = '\0'; printf("ClientUDP: Received\n %s \n",bufudp ); close(sockfdudp); return 0; 

    Il est fort probable que vous envoyiez quelque chose à un serveur qui n’écoute pas sur ce port particulier. Cela provoquerait un message icmp à être renvoyé, et votre prochain recvfrom renverra une erreur dans le cas où vous connectez le socket.

    Vérifiez avec tcpdump ou WireShark ce qui se passe sur le fil.

    À mon avis, votre adresse IP est mauvaise, ou le port est déjà utilisé. UDP est sans connexion, il n’y a donc pas de “connexion” à échouer.