gpt4 book ai didi

c++ - 无法从端口 2368 (Linux) C 接收 UDP 流

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:35 25 4
gpt4 key购买 nike

我目前正在使用在端口 2368 上传送 UDP 数据流的激光传感器。我可以使用 Wireshark 查看数据包。

由于我无法发布图片,所以我写下了 Wireshark 显示的数据包内容:

来源:192.168.17.141目的地:192.168.3.255协议(protocol):UDP源端口:https (443)目标端口:opentable (2368)

但是,我想通过以下示例 C 程序使用套接字读取数据包:

int main(int argc, char *argv[])
{
int sock, n, res;
unsigned int length = 1206;
char* buffer = new char[1206];

sock= socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0) error("socket");

uint16_t udp_port = 2368;
sockaddr_in my_addr;
socklen_t len = sizeof(sockaddr_in);
memset(&my_addr, 0, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(udp_port);
my_addr.sin_addr.s_addr = INADDR_ANY;

cout << my_addr.sin_family << endl;
cout << my_addr.sin_port << endl;
cout << my_addr.sin_addr.s_addr << endl;


res = bind(sock, (sockaddr *)&my_addr, sizeof(sockaddr_in));
if (res == -1)
{
perror("bind");
return -1;
}


while (true)
{
n = recvfrom(sock,buffer,1,0,NULL,NULL);
if (n < 0) error("recvfrom");
}

close(sock);
return 0;
}

程序成功直到到达recvfrom()。套接字在那里等待包并且没有收到任何东西。我用 Winsock 为 Windows 编写了相同的程序,并且运行良好。由于我是 Linux 操作系统的新手,我不知道如何解决这个问题,非常感谢您的建议!

附加信息:我手动分配了以下 IP 和网络掩码到 eth4(这是连接设备的接口(interface)):

IP: 192.168.3.5纳米:255.255.255.0

最佳答案

设置 SO_BROADCAST 选项,即使是接收。根据 socket(7) 联机帮助页:

SO_BROADCAST:
Set or get the broadcast flag. When enabled, datagram sockets receive packets sent to a broadcast address and they are allowed to send packets to a broadcast address. This option has no effect on stream-oriented sockets.

也有可能是你的接口(interface)配置不正确。验证您是否为相关接口(interface)配置了 192.168.3.xxx/24 地址。

关于c++ - 无法从端口 2368 (Linux) C 接收 UDP 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8910302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com