Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C Linux中检查是否接收到UDP数据包_C_Linux_Sockets_Server_Udp - Fatal编程技术网

如何在C Linux中检查是否接收到UDP数据包

如何在C Linux中检查是否接收到UDP数据包,c,linux,sockets,server,udp,C,Linux,Sockets,Server,Udp,下面示例代码中的“recvfrom()”将等待收到UDP数据包 但我需要检查UDP数据包是否可用。 如果未收到数据包,则继续执行其他任务。 若收到数据包,则接收数据包并进行解析。 在Linux c程序中如何实现这一点?请帮忙 for (;;) { printf("waiting on port %d\n", SERVICE_PORT); recvlen = recvfrom(fd, buf, BUFSIZE, 0, (struct sockaddr *)&remaddr

下面示例代码中的“recvfrom()”将等待收到UDP数据包

但我需要检查UDP数据包是否可用。 如果未收到数据包,则继续执行其他任务。 若收到数据包,则接收数据包并进行解析。 在Linux c程序中如何实现这一点?请帮忙

for (;;) 
{
    printf("waiting on port %d\n", SERVICE_PORT);
    recvlen = recvfrom(fd, buf, BUFSIZE, 0, (struct sockaddr *)&remaddr, &addrlen);
    printf("received %d bytes\n", recvlen);
    if (recvlen > 0) {
        buf[recvlen] = 0;
        printf("received message: \"%s\"\n", buf);
    }
}

您可以在代码中等待特定的几秒钟。若你们在那个段时间内并没有收到数据包,那个么要求它做进一步的处理。或者检查recvfrom的返回值以验证收到的数据包大小。

您可以在代码中等待特定的秒数。若你们在那个段时间内并没有收到数据包,那个么要求它做进一步的处理。或者检查recvfrom的返回值,以验证接收到的数据包大小。

您可以使用函数来确定某个内容已准备好在套接字上读取

while (1)
{
    int retval;
    fd_set rfds;
    // one second timeout
    struct timeval tv = {1,0};

    FD_ZERO(&rfds);
    FD_SET(fd, &rfds);

    retval = select(1, &rfds, NULL, NULL, &tv);

    if (retval == -1)
    {
        perror("select()");
        exit(1);
    }        
    else if (retval)
    {
        printf("Data is available now.\n");      
    }
    else
    {
        // no data to read... perform other tasks
    }
}
您可以使用函数来知道某个内容已准备好在套接字上读取

while (1)
{
    int retval;
    fd_set rfds;
    // one second timeout
    struct timeval tv = {1,0};

    FD_ZERO(&rfds);
    FD_SET(fd, &rfds);

    retval = select(1, &rfds, NULL, NULL, &tv);

    if (retval == -1)
    {
        perror("select()");
        exit(1);
    }        
    else if (retval)
    {
        printf("Data is available now.\n");      
    }
    else
    {
        // no data to read... perform other tasks
    }
}

您可以使用(
select
)[linux.die.net/man/2/select]函数来知道某个内容已准备好在套接字上读取。是,选择成功。谢谢。您可以使用(
select
)[linux.die.net/man/2/select]函数来知道某个内容已准备好在套接字上读取。是,选择成功。谢谢你。是的,我的工作。谢谢你。是的,我的工作。非常感谢。