当前位置:  开发笔记 > 前端 > 正文

如何在Linux中使用C进行UDP广播?

如何解决《如何在Linux中使用C进行UDP广播?》经验,为你挑选了2个好方法。

如何在Linux中使用C进行UDP广播?



1> 小智..:

在许多IP堆栈中,例如Linux,此代码不起作用.您的套接字必须具有广播权限.试试这个:

bcast_sock = socket(AF_INET, SOCK_DGRAM, 0);
int broadcastEnable=1;
int ret=setsockopt(bcast_sock, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));

/* Add other code, sockaddr, sendto() etc. */


是正确的!如果您不授予套接字广播权限,您将获得权限被拒绝错误消息.
POSIX实际上需要此行为,如果没有为套接字设置SO_BROADCAST选项,请参阅http://pubs.opengroup.org/onlinepubs/009695399/functions/sendto.html`sendto()将失败

2> shodanex..:

放松是正确的,除了你应该使用'sendto'

这是一个示例,假设您已经有一个套接字.它取自clamav

static void
broadcast(const char *mess)
{
    struct sockaddr_in s;

    if(broadcastSock < 0)
        return;

    memset(&s, '\0', sizeof(struct sockaddr_in));
    s.sin_family = AF_INET;
    s.sin_port = (in_port_t)htons(tcpSocket ? tcpSocket : 3310);
    s.sin_addr.s_addr = htonl(INADDR_BROADCAST);

    cli_dbgmsg("broadcast %s to %d\n", mess, broadcastSock);
    if(sendto(broadcastSock, mess, strlen(mess), 0, (struct sockaddr *)&s, sizeof(struct sockaddr_in)) < 0)
        perror("sendto");
}

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有