繁体   English   中英

NIC中收到的数据包无法通过套接字读取

[英]Packet received in NIC not read via socket

我已经打开UDP套接字来监听传入的数据包。 我可以在Wireshk日志中看到到达NIC的数据包。 但是通过Socket读取时不可用。 “ netsatat”命令显示在端口号上侦听所有传入的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);

这将仅在bind调用失败时设置fromlen 而且由于fromlen没有正确初始化,它将包含一个看似随机的值,该值对recvfrom无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM