向255.255.255.255发送UDP广播包时出错!
以下这个程序向受限广播地址255.255.255.255发广播信息出错:Network is unreachable
是什么原因啊?该怎么解决呢,我都弄了好久啊。。。
#include<stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define SERVPORT 3333
#define MAXDATASIZE 100
int main(void)
{
int sockfd, recvbytes;
int ret;
char buf[MAXDATASIZE];
struct sockaddr_in serv_addr;
int addrlen;
int ret1,ret2;
const int on = 1;
// char ToIP[] = "255.255.255.255";
// char ToIP[] = "192.168.0.230";
// char ToIP[] = "192.168.0.255";
printf("version:broadcast,255.255.255.255\n");
memset(buf,0,MAXDATASIZE);
strcpy(buf,"This is Yaopengfei\n");
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){
perror("socket�");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
//以下这部分是给目的IP地址赋值
// ret1 = inet_aton(ToIP,&serv_addr.sin_addr);
// printf("ret1 is: %d\n",ret1);
serv_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
//serv_addr.sin_addr.s_addr = INADDR_BROADCAST;
bzero(&(serv_addr.sin_zero),8);
ret2 = setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
printf("ret2 is:%d\n",ret2);
ret = sendto(sockfd,buf,19,0,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr ) );
if( ret<=0 )
{
perror("sendto error\n");
}
printf("ret is %d\n",ret);
ret = recvfrom(sockfd,buf,MAXDATASIZE,0,(struct sockaddr *)&serv_addr,&addrlen );
printf("ret for recv is:%d\n",ret);
if( ret<=0 )
{
printf("receive error\n");
}
buf[ret] = '\0';
printf("Received: %s",buf);
close(sockfd);
return 0;
}
运行到sendto时,就提示错误了:Network is unreachable
但是,当我向192.168.0.255发送广播时,就完全OK哦,都可以收到我的server返回的信息呢。。
请问一下各位大虾,这是怎么回事呢?我的系统是linux 2.6(在我的开发板linux2.4.18上面跑也是一样的错误提示哦),IP地址配置为192.168.0.X
谢谢各位了!