如何检查是否在 C Linux 中收到 UDP 数据包
How to check if UDP packet received in C Linux
"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 的 return 值来验证接收到的数据包大小。
您可以使用 select
函数来了解某个内容已准备好在套接字上读取。
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
}
}
"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 的 return 值来验证接收到的数据包大小。
您可以使用 select
函数来了解某个内容已准备好在套接字上读取。
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
}
}