gpt4 book ai didi

c - NIC 收到的数据包未通过套接字读取

转载 作者:行者123 更新时间:2023-11-30 15:51:01 25 4
gpt4 key购买 nike

我已经打开了一个 UDP 套接字来监听传入的数据包。我可以在wireshark日志中看到到达网卡的数据包。但通过 Socket 读取时则不可用。 “netsata”命令显示监听任何传入 UDP 消息的端口号。套接字读取器继续等待。我已经在Linux(ubuntu)环境中使用Java和C进行了检查。我可以看到收到的 IPV4 数据包的标识值为 0。这个值对套接字读取数据有什么作用吗?我用于读取套接字的 C 代码

int sock, n, nr;
socklen_t fromlen;
struct sockaddr_in server;
struct sockaddr_in from;
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0)
printf("Can not create socket in server\n");
memset(&server, 0, sizeof(struct sockaddr_in));
server.sin_family = AF_INET;
server.sin_port = htons(5555);
server.sin_addr.s_addr = INADDR_ANY;
if(bind(sock, (struct sockaddr *)&server, sizeof(server)) < 0)
fromlen = sizeof(struct sockaddr_in);
while(1) {
printf("Waiting to receive\n");
n = recvfrom(sock, &nr, sizeof(nr), 0, (struct sockaddr *) &from, &fromlen);
printf("I have received");
}

请找到wireshark跟踪http://imgur.com/Au9BeS1

最佳答案

这是一个问题:

if(bind(sock, (struct sockaddr *)&server, sizeof(server)) < 0)
fromlen = sizeof(struct sockaddr_in);

这只会设置 fromlenbind 调用失败。由于 fromlen 未正确初始化,它将包含一个看似随机的值,该值对 recvfrom 无效。

关于c - NIC 收到的数据包未通过套接字读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15404722/

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