![](/img/trans.png)
[英]Can't read RTP packet (or get its size) from multicast socket via several 'read' calls
[英]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.