Tôi đang cố gắng gửi một chuỗi HI đến một máy chủ qua UDP trong một cổng cụ thể và sau đó nhận phản hồi. Tuy nhiên, sau khi tôi cố gắng để có được phản ứng bằng cách sử dụng recvfrom() tôi đã bị mắc kẹt trong trạng thái chặn. Tôi đã cố gắng sử dụng UDP kết nối nhưng tôi nhận:Lỗi khi nhận trong UDP: Kết nối bị từ chối
Lỗi nhận trong UDP: Kết nối từ chối
gì có thể là lý do cho việc này? Máy chủ không nằm trong tầm kiểm soát của tôi, nhưng tôi biết nó hoạt động tốt.
Tôi đã thêm mã
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;
Vì 'recvfrom' sẽ chặn cho đến khi thư có sẵn tại ổ cắm, bạn có chắc máy chủ đang trả lời thư của bạn không? – jschmier
Lỗi máy chủ có câu hỏi chuẩn về [Kết nối bị từ chối] (http://serverfault.com/questions/725262/what-causes-the-connection-refused-message). – Raedwald