Jtti:linux中udp怎么判断是否接收到数据?

news/2024/5/18 14:00:58 标签: linux, udp, 运维

在Linux中,使用UDP协议进行通信时,可以通过检查套接字(Socket)接收缓冲区中是否有数据来判断是否接收到数据。以下是一个简单的方法:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define PORT 12345
#define BUFFER_SIZE 1024

int main() {
    int sockfd;
    struct sockaddr_in serverAddr, clientAddr;
    socklen_t addrLen = sizeof(clientAddr);
    char buffer[BUFFER_SIZE];

    // 创建UDP套接字
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd == -1) {
        perror("socket");
        exit(EXIT_FAILURE);
    }

    // 绑定地址和端口
    memset(&serverAddr, 0, sizeof(serverAddr));
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = INADDR_ANY;
    serverAddr.sin_port = htons(PORT);

    if (bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == -1) {
        perror("bind");
        close(sockfd);
        exit(EXIT_FAILURE);
    }

    printf("Waiting for data...\n");

    while (1) {
        // 接收数据
        int recvBytes = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&clientAddr, &addrLen);

        if (recvBytes > 0) {
            buffer[recvBytes] = '\0';  // 添加字符串结束符
            printf("Received data: %s\n", buffer);
        } else {
            perror("recvfrom");
        }
    }

    // 关闭套接字
    close(sockfd);

    return 0;
}
 

在C语言中,可以使用recvfrom函数来从UDP套接字接收数据。该函数返回接收到的字节数,如果返回值大于0.表示成功接收到数据。

在上述代码中,recvfrom函数用于接收数据。如果recvfrom返回的字节数大于0.则表示成功接收到数据。你可以根据具体的应用场景修改和扩展这个示例代码。


http://www.niftyadmin.cn/n/5232758.html

相关文章

mysql在linux环境下安装(rpm)以及初始化后的登录配置

注&#xff1a;该安装步骤转载于CSDN,下方配置为原创 按照图片安装并初始化完成MySQL等操作后进行&#xff1b; 安装对于rpm包集合 1-查看安装情况&#xff08;有4个路径&#xff09; whereis mysql 2-查看服务状态 systemctl status mysql 3-初始化数据库 mysqld --initial…

Tmux奇技淫巧

Tmux奇技淫巧 在日常的开发工作中&#xff0c;终端是我们最常用的工具之一。在终端中我们可以调用各种解释器&#xff0c;来执行命令&#xff0c;完成我们的工作。然而&#xff0c;对于只使用终端的默认功能的开发者来说&#xff0c;他们可能会错过一些强大的工具和技巧&#…

研习代码 day46 | 动态规划——子序列问题2

一、最长公共子序列 1.1 题目 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除…

mac如何修改应用图标(转)

当我们的Mac 中存在多个一样的软件&#xff0c;同时打开时在程序坞显示的图标都一样&#xff0c;为了快速区分出哪个是哪个&#xff0c;可以按照自己的需求修改下软件图标 转自&#xff1a;mac如何修改应用图标 在mac系统上修改一个应用图标是非常的简单的&#xff0c;下面是修…

微信小程序:input双向绑定

微信小程序&#xff1a;input双向绑定 微信小程序&#xff1a;input双向绑定1 数据容器准备2 输入组件准备3 逻辑代码准备4 总结实战示例1.wxml文件导入2.js文件导入 微信小程序&#xff1a;input双向绑定 <说明> PS&#xff1a;该笔记采用渐进式编程&#xff0c;使每一步…

3D模型材质编辑

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 如今&#xff0c;3D 纹理、打印和建模都非常流行。使用可用的高级工具&#xff0c;创建 3D 模型…

从认知到实现,一文读懂实现分布式锁的五种方案。

文章目录 01. 什么是分布式锁&#xff1f; 02. 分布式锁的优缺点有哪些&#xff1f; 03. 五种分布式锁的区别&#xff1f; 04. 分布式锁的使用场景有哪些&#xff1f; 05. 为什么需要分布式锁&#xff1f; 06. 分布式锁有哪些特点&#xff1f; 07. 基于MySQL数据库实现的分布式…