在线时间2 小时
UID261333
注册时间2011-1-28
NXP金币0
该用户从未签到
新手上路

- 积分
- 34
- 最后登录
- 1970-1-1
|
需要k60使用UDP接收广播信息,建立链接。
比如k60接收从192.168.1.255 5055端口接收广播信息
怎样配置?
我的配置只能接收到点对点的udp信息报
附上代码
int connect_UDP()
{
uint_32 cmd_reply_len;
uint_32 sock,sendsock;
uint_16 rlen;
IPCFG_IP_ADDRESS_DATA ip_data;
_enet_address enet_addr = ENET_MAC;
sockaddr_in addr;
sockaddr_in dest_addr;
uint_32 error, option;
MQX_FILE_PTR sockfd, telnetfd;
_mqx_uint echoflag = IO_SERIAL_ECHO;
char senddata[128] = "mesh gate connected!\r\n";
char recvdata[512];
int count;
int num,pRcv;
// _RTCSPCB_init = 3;
// _RTCS_msgpool_init = 3;
// _RTCS_socket_part_init = 3;
memset(recvdata,0,sizeof(recvdata));
error = RTCS_create();
if (error != RTCS_OK)
{
fputs("Fatal Error: RTCS initialization failed.", stderr);
_task_block();
}
ip_data.ip = ENET_IPADDR;
ip_data.mask = ENET_IPMASK;
ip_data.gateway = ENET_IPGATEWAY;
ENET_get_mac_address (BSP_DEFAULT_ENET_DEVICE, ENET_IPADDR, enet_addr);
error = ipcfg_init_device(BSP_DEFAULT_ENET_DEVICE, enet_addr);
if (error != IPCFG_OK)
{
fprintf(stderr, "Fatal Error 0x%X: Network device initialization failed.\n", error);
_task_block();
}
error = ipcfg_bind_staticip(BSP_DEFAULT_ENET_DEVICE, &ip_data);
if (error != IPCFG_OK)
{
fprintf(stderr, "Fatal Error 0x%X: IP address binding failed.", error);
_task_block();
}
/* Install device drivers for socket and telnet I/O */
//_io_socket_install("socket:");
sendsock = socket(PF_INET, SOCK_DGRAM, 0);
/* Bind the socket to the Telnet port */
addr.sin_family = AF_INET;
addr.sin_port = 5055;
//addr.sin_addr.s_addr = ENET_IPADDR; //INADDR_BROADCAST
addr.sin_addr.s_addr = INADDR_ANY;
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = 5055;
dest_addr.sin_addr.s_addr = IPADDR(192,168,1,112);
option = 1;
//setsockopt(sendsock,SOL_SOCKET,OPT_RECEIVE_PUSH,&option,sizeof(option));
error = bind(sendsock, &addr, sizeof(addr)); //return_error_if(error != RTCS_OK)
_time_delay(100);
rlen = sizeof(dest_addr);
//sendto(sendsock, senddata, strlen(senddata), 0,&dest_addr, rlen);
while(1)
{
count = recvfrom(sendsock, recvdata, 512, 0, (struct sockaddr *) &dest_addr,&rlen);
if(count == RTCS_ERROR)
{
;
}
else
{
if(count>0)
{
//_io_write(serial4_fd, recvdata, count);
//_time_delay(1000);
//memset(recvdata,0,sizeof(recvdata));
//count = 0;
//cmd_reply_len = phone_cmd_analsys((uint_8*)recvdata,count);
//sendto(sendsock, phone_reply, cmd_reply_len, 0,&dest_addr, rlen);
sendto(sendsock, "123", 3, 0,&dest_addr, rlen); //随便测试
memset(phone_reply,0,PHONE_REPLY_LEN);
count = 0;
}
}
}
}
http://blog.csdn.net/robertkun/article/details/8475843#comments
这个是linux的一个实例,但是他的配置中有个 nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt)); 这个操作
但是在MQX中源码中并没有找到和SO_BROADCAST相关的配置参数,怎么办。
|
|