在线时间0 小时
UID359058
注册时间2012-5-16
NXP金币0
该用户从未签到
新手上路

- 积分
- 42
- 最后登录
- 1970-1-1
|
各位好,我最近遇到这样的问题,做的设备收不到广播包,是不是广播包要有什么设置呀?
谢谢!
我的代码如下: 程序到recvfrom 就阻塞不往下跑了, 但是能够ping通对方。对方发广播包我却接受不到,
求各位高手解决,谢谢!
void enet_init(void)/*绑定ip到以太网接口*/
{
int_32 error;
_enet_address mac_address;
_ip_address ip_address2 = ENET_IPADDR;
/*创建协议栈*/
error = RTCS_create();
/*获取默认的MAC地址*/
error = ENET_get_mac_address(DEMOCFG_DEFAULT_DEVICE, ip_address2, mac_address);
/*初始化以太网控制器接口,并且配置MAC地址*/
error = ENET_initialize(DEMOCFG_DEFAULT_DEVICE, mac_address, 0, &ehandle);
/*将协议栈和以太网控制器接口绑定到一起*/
error = RTCS_if_add(ehandle, RTCS_IF_ENET, &ihandle);
/*配置协议栈的IP地址和子网掩码*/
error = RTCS_if_bind(ihandle, ip_address2, ENET_IPMASK);
}
之后是绑定套接字:
void EthernetInit(void)
{
int error;
sockaddr_in local_addr;
/* Bind to UDP port */
local_addr.sin_family = AF_INET;
local_addr.sin_port = 7889;
local_addr.sin_addr.s_addr = INADDR_ANY;
sock = socket(PF_INET, SOCK_DGRAM, 0);
if (sock == RTCS_SOCKET_ERROR)
{
printf("failed to create socket !\n");
}
error = bind(sock, &local_addr, sizeof(local_addr));
if (error != RTCS_OK)
{
printf("\nFailed to bind datagram \n");
}
}
void recvdata(void)/*接收函数*/
{
unsigned short rlen;
int length;
sockaddr_in raddr;
//uint_32 sock;
_time_delay(1000);
for (;; )
{
memset(&raddr, 0, sizeof(raddr));
rlen = sizeof(raddr);
length = recvfrom(sock, NULL, 0, 0, &raddr, &rlen);
if (length == RTCS_ERROR)
{
printf("\nError %x receiving from %d.%d.%d.%d,%d",
RTCS_geterror(sock),
(raddr.sin_addr.s_addr >> 24) & 0xFF,
(raddr.sin_addr.s_addr >> 16) & 0xFF,
(raddr.sin_addr.s_addr >> 8) & 0xFF,
raddr.sin_addr.s_addr & 0xFF,
raddr.sin_port);
}
else
{
printf("\nsocket5 is %d\n", length);
}
_time_delay(20);
}
}
已经解决,原因要在user_config.h设置接收广播。 论坛人气低呀,没有人回答。好在都自己解决了。
|
|