c - C语言广播

标签 c network-programming udp broadcast

我有一个用 C 编写的应用程序,它同时是服务器和客户端。我所做的事情如下:

sock = socket(AF_INET, SOCK_DGRAM, 0);
bzero(&server, length);
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(MYPORT);

char broadcast = '1';
int broadcastlen = sizeof(broadcast);
if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &broadcast, &broadcastlen) < 0) {
    close(sock);
    error("Error in setting broadcast option");
}
if (bind(sock, (struct sockaddr*) &server, sizeof(server)) < 0) {
    close(sock);
    error("Error in BINDING");
}
bzero(&sender, length);
bcast.sin_family = AF_INET;
bcast.sin_addr.s_addr = NBCAST; // NBCAST is the broadcast address of the subnet
bcast.sin_port = htons(MYPORT);

if (sendto(sock, dateQuery, strlen(dateQuery) + 1, 0, (struct sockaddr*)&bcast, sizeof(bcast)) < 0) {
    close(sock);
    error("ERROR in sending");
}

到目前为止,一切正常。但我用 sock 参数启动一个线程来监听,并执行以下操作:

int len = sizeof(struct sockaddr_in);
struct sockaddr_in sender_addr;

recfrom(sock, recvbuff, recvbufflen, 0, (struct sockaddr*) &sender_addr, &len);

它永远阻塞在那里。我试图让它在不同的PC上工作,但它似乎不起作用,因为线程由于recvfrom()而被阻塞。谁能告诉我我的代码有什么问题吗?

谢谢

<小时/>

编辑:如果我的代码被破坏,你能建议一种解决这个问题的方法吗?所以,我的任务是用 C 语言实现一个应用程序,它同时是服务器和客户端。我每 3 秒发送一条广播消息,并且我必须使用系统时间回复该广播消息。 到目前为止,这是我想到的想法,当然我没有回复该广播消息,因为我什至无法阅读它。

最佳答案

我刚刚解决了这个问题。该代码运行良好,我只需禁用防火墙即可。但我不知道这对我有什么帮助。无论如何,感谢您的回答和评论。

关于c - C语言广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10322781/

相关文章:

c - 如何检查 doxygen\return 语句的正确性?

linux - 从 Go 访问 Linux 网络 API

c# - 我的服务器(TcpClient、TcpListener)中有一个黑洞

c - 链接到多个共享库,这些共享库都链接到一个公共(public)静态库

c - string.h的源码在哪里获取;不是函数原型(prototype),而是函数的实现

c - 写入文件并使用带循环的 if 语句

c# - Callback 与新的 AsyncCallback(Callback) 有什么不同?

vb.net - 用于接收和发送的 udp 客户端不起作用

c# - 通过 UDP C# 将数据作为双 float 发送

java - 需要在 Java 中发送 UDP 数据包并接收响应