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 en utilisant recvfrom(), j'étais coincé en état de blocage. J'ai essayé d'utiliser UDP connecté mais je suis:Erreur lors de la réception en UDP: Connexion refusée
Erreur de réception dans UDP: Connexion refusée
Quelles pourraient être les raisons? Le serveur n'est pas sous mon contrôle, mais je sais que cela fonctionne très bien.
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;
Puisque 'recvfrom' bloquera jusqu'à ce qu'un message soit disponible sur le socket, êtes-vous sûr que le serveur répond à votre message? – jschmier
Server Fault a une question canonique sur [Connection Refused] (http://serverfault.com/questions/725262/what-causes-the-connection-refused-message). – Raedwald