Я хочу использовать UDP, чтобы отправить сообщение в визуальный блок, среда которого vxworks, я проверяю, что мой клиентский код работает хорошо, компьютер и визуальный блок могут пропинговать друг друга. Но функция select () всегда возвращает 0 в моем приемнике, Я должен выключить свой брандмауэр
вот мой код:
/* Create socket */
if ((sFd = socket (AF_INET, SOCK_DGRAM, 0)) == ERROR)
{
perror ("socket");
close (sFd);
return (ERROR);
}
/* Build socket address */
bzero ((struct sockaddr_in *) &myAddr, sockAddrSize);
myAddr.sin_family = AF_INET;
myAddr.sin_port = htons (8882); //vxport
myAddr.sin_addr.s_addr = htonl(INADDR_ANY); //local ip
bzero ((struct sockaddr_in *) &remoteAddr, sockAddrSize);
remoteAddr.sin_family = AF_INET;
remoteAddr.sin_port = htons (8881); //vs port
remoteAddr.sin_addr.s_addr = inet_addr ("192.168.73.1"); //vs IP
/* Bind socket to local address */
if (bind (sFd, (struct sockaddr *) &myAddr, sockAddrSize) == ERROR)
{
perror ("bind");
close (sFd);
return (ERROR);
}
memset(recvBuff,0,sizeof(recvBuff)); //clear the receiver buffer
while(1)
{
FD_ZERO(&rfd);
FD_SET(sFd,&rfd);
printf("sFd = %d\n",sFd);
rc = select(sFd + 1,&rfd,NULL,NULL,&wait);
if(rc == 0){
printf("time out\n");
// return -1;
}
else if(rc <0/*== ERROR*/){
perror("select()");
break;
}
else if(FD_ISSET(sFd,&rfd)){
if ((nbytes = recvfrom (sFd, recvBuff, sizeof (recvBuff), 0,
(struct sockaddr *) &remoteAddr,&sockAddrSize)) < 0)
{
perror ("recvfrom");
close (sFd);
return (ERROR);
}
else{
recvBuff[nbytes] = "\0";
printf("is recieved the message\n");
}
}
}
close (sFd); }
Кто-нибудь может найти, в чем проблема?Большое спасибо ..