Я новичок в сокетах UDP, раньше работал с TCP. Кажется, мой клиент не может подключиться к моему серверу, но я не знаю, в чем проблема.
Когда я запускаю свой сервер, все работает нормально. Компилируется и запускается без проблем и ждет сообщения от клиента.
С другой стороны, клиент дает сбой, компилируется без проблем, но во время выполнения выдает мне ошибку при связывании(). Я видел в других местах, что привязка не всегда необходима, поэтому я также пытаюсь удалить ее, но когда я это делаю, появляется ошибка в sendto(). Я использую perror(), чтобы попытаться найти проблему. В bind сообщение «Адрес уже используется», а в sendto — «Семейство адресов не поддерживается протоколом».
Не знаю, неправильный ли мой подход. Я пробовал несколько способов сделать это, но ничего не работает. Любая помощь будет принята с благодарностью.
Код сервера:
int main (){
int sockfd, newsockfd;
int portno;
socklen_t tamcli;
struct sockaddr_in dest, sa;
char* mensaje;
bzero((char *) &dest, sizeof(dest));
portno = 5001;
mensaje = (char*)malloc(sizeof(char)*100);
sockfd = socket(PF_INET, SOCK_DGRAM, 0);
if (sockfd < 0){
printf("ERROR al abrir socket\n");
perror("sockto");
exit(1);
}
dest.sin_family = AF_INET;
dest.sin_port = htons(portno);
dest.sin_addr.s_addr = INADDR_ANY;
tamcli = sizeof(sa);
if (bind(sockfd, (struct sockaddr *) &dest, sizeof(dest)) < 0){
printf("ERROR en enlazar\n");
perror("bind");
exit(1);
}
newsockfd = recvfrom(sockfd, mensaje, sizeof(mensaje), 0,(struct sockaddr *)&sa, &tamcli);
if (newsockfd < 0){
printf("ERROR en aceptar el mensaje\n");
perror("recvfrom");
exit(1);
}
printf("El mensaje del cliente fue: %s\n", mensaje);
close(sockfd);
}
Код клиента:
int main (){
int sockfd, newsockfd;
int portno;
socklen_t tamcli;
struct sockaddr_in dest, sa;
char* mensaje;
bzero((char *) &dest, sizeof(dest));
portno = 5001;
mensaje = (char*)malloc(sizeof(char)*100);
tamcli = sizeof(sa);
mensaje = "Hola";
sockfd = socket(PF_INET, SOCK_DGRAM, 0);
if (sockfd < 0){
printf("ERROR al abrir socket\n");
perror("socket");
exit(1);
}
dest.sin_family = AF_INET;
dest.sin_port = htons(portno);
if (inet_aton("127.0.0.1", &dest.sin_addr) == 0){
printf("Error conectandose a la direccion");
perror("inet_aton");
exit(1);
}
if (bind(sockfd, (struct sockaddr *) &dest, sizeof(dest)) < 0){
printf("ERROR en enlazar\n");
perror("bind");
exit(1);
}
newsockfd = sendto(sockfd, mensaje, sizeof(mensaje), 0, (struct sockaddr *) &sa, tamcli);
if (newsockfd < 0){
printf("ERROR en enviar el mensaje\n");
perror("sendto");
exit(1);
}
close(sockfd);
}