Мне нужно подключиться к удаленному серверу через UDP и отправить ему предопределенное сообщение, чтобы вернуть сообщение. Я сначала пробовал это в TCP, и он работал, но в UDP после отправки сообщения и прослушивания ответа в recvfrom() я ничего не получаю. Может ли кто-нибудь сказать мне, что может быть проблемой здесь.Проблема с получением сообщения UDP с сервера
if ((bytes_sent = sendto(sockfd, UDP_MSG, strlen(UDP_MSG), 0, p->ai_addr, p->ai_addrlen)) == -1) {
perror("ClientUDP: Error sending data");
exit(1);
}
printf("Data sent %s\n", UDP_MSG);
len = sizeof(struct sockaddr_storage);
if ((bytes_recv = recvfrom(sockfd, 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);
Порт вводится с клавиатуры с помощью scanf(), и сообщение представляет собой строку «HI».
Вы уверены, что сервер работает в обоих протоколах? Вы контролируете сервер? Если да, можете ли вы сказать, даже если сообщение приходит на сервер в первую очередь? –
Нет, я не контролирую сервер, но поддерживает UDP. Единственная константа в номере порта. Есть ли способ для меня убедиться, что сообщение правильно отправлено с моей стороны? – sfactor
Создайте * подключенный * UDP-сокет - таким образом, если ОС получит ICMP-Port-Unreachable, вы получите ошибку при приеме (но не при отправке.) –