Linux C/C++UDP通信实现

2023-05-16

文章目录

  • 一、UDP通信流程
  • 二、代码实现
    • 1.服务器
    • 2.客户端


一、UDP通信流程

在这里插入图片描述

二、代码实现

1.服务器

代码如下(示例):

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

int main()
{
    // 1.创建一个通信的socket
    int fd = socket(PF_INET, SOCK_DGRAM, 0);

    if (fd == -1)
    {
        perror("socket");
        exit(-1);
    }

    // 2.绑定
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(9999);
    addr.sin_addr.s_addr = INADDR_ANY;

    int ret = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
    if (ret == -1)
    {
        perror("bind");
        exit(-1);
    }

    // 3.通信
    while (1)
    {
        char buf[128];
        char ipbuf[16];

        struct sockaddr_in caddr;
        int len = sizeof(caddr);

        //接受数据
        int num = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&caddr, &len);

        printf("client ip:%s,port :%d\n",
            inet_ntop(AF_INET, &caddr.sin_addr.s_addr, ipbuf, sizeof(ipbuf)),
            ntohs(caddr.sin_port));

        printf("client say:%s\n", buf);

        //发送数据
        sendto(fd, buf, strlen(buf) + 1,0,(struct sockaddr*)&caddr,sizeof(caddr));
    }

    close(fd);

    return 0;
}

2.客户端

代码如下(示例):

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

int main()
{
    // 1.创建一个通信的socket
    int fd = socket(PF_INET, SOCK_DGRAM, 0);

    if (fd == -1)
    {
        perror("socket");
        exit(-1);
    }

    //服务器地址信息
    struct sockaddr_in saddr;
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(9999);
    inet_pton(AF_INET, "182.61.11.197", &saddr.sin_addr.s_addr);

    int num = 0;
    // 3.通信
    while (1)
    {
        char buf[128];
        sprintf(buf, "hello ,i am client %d\n", num++);

        //发送数据
        sendto(fd, buf, strlen(buf) + 1,0,(struct sockaddr*)&saddr,sizeof(saddr));

        //接受数据
        int num = recvfrom(fd, buf, sizeof(buf), 0, NULL, NULL);

        printf("server say:%s\n", buf);

        sleep(1);
    }

    close(fd);

    return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux C/C++UDP通信实现 的相关文章

  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 大多数 Linux 系统头文件与 C++ 兼容吗?

    大多数 Linux 系统头文件 API C 兼容吗 今天我试图做这样的事情 include
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include

随机推荐

  • 游戏客户端编程

    文章目录 一 代码框架二 新建项目三 演示效果 一 代码框架 本次实验使用的网游客户端框架来自课堂老师的资料 链接 xff1a https pan baidu com s 1WSkrRTFPuN1N34BsySkeaQ 提取码 xff1a
  • 数学图形与机器视觉基础(1)

    文章目录 一 图片处理及分析1 修改图片位数和颜色并进行分析2 修改图片格式并进行分析 二 用奇异值分解 xff08 SVD xff09 对一张图片进行特征值提取 xff08 降维 xff09 处理三 采用图像的开闭运算 腐蚀 膨胀 xff
  • STM32之串口通信

    文章目录 一 串口通信与USART二 程序编写输出Hello Windows三 GPIO波形参考链接 一 串口通信与USART 二 程序编写输出Hello Windows 串口通信 串口通信是一种设备间非常常用的串行通行方式 xff0c 其
  • 【FPGA】UART串口通信

    文章目录 一 通信方式1 串行通信2 并行通信 二 UART串口通信1 模块设计与时序图2 代码实现 三 测试结果1 仿真结果2 上板验证 一 通信方式 1 串行通信 串行通信是指利用一条传输线将数据一位位地顺序传送 xff08 也就是说串
  • 【FPGA】基于状态机实现自动售货机模拟

    文章目录 一 售货机功能二 售货机状态分析及模块划分三 代码实现四 上板验证 一 售货机功能 此自动售货机模拟基于EP4CE6F17C8开发板实现 xff0c 用按键 xff0c led灯 xff0c 数码管表示各个输入输出 功能 xff1
  • 【FPGA】中值滤波处理BMP图片

    文章目录 一 中值滤波二 BMP图片格式三 功能实现1 代码设计思路2 shift IP核3 代码实现 四 结果测试参考博客 一 中值滤波 中值滤波法是一种非线性平滑技术 xff0c 它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点
  • C++常用库

    以下是常用的 C 43 43 库的分类和列表 xff1a 1 标准库 iostream xff1a 提供输入和输出函数 xff0c 如 96 cout 96 和 96 cin 96 string xff1a 提供字符串类型和操作函数 xff
  • ideal使用maven时候发生org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException

    第一次使用maven创建web项目 xff0c 在访问servlet时发生错误 原因是maven默认是用的是tomcat6而项目的jdk为1 8 xff0c 二者并不支持 所以需要将maven的tomcat版本换为tomcat7或更高 在项
  • vue 项目 axios 响应拦截器 统一判断401 (登录)过期

    背景 xff1a 为了模拟token 过期 xff0c 专门把token 设置错误 xff0c 为401 界面 把axios 官网里的 复制到拦截器里 放置到request js 里 在响应器里进行判断4 5 状态码错误 以下为代码 引入a
  • 异常和异常的处理方式

    异常 1 概述 异常是一些用来封装错误信息的对象 它由异常的类型 提示信息 报错的行号提示三部分组成 2 异常的继承结构 3 异常的处理方式 当程序中遇到了异常 通常有两种处理方式 捕获或者向上抛出 当一个方法抛出异常 调用位置可以不做处理
  • A1&AlienGo--通过realsense-viewer调用相机

    使用机器狗时 xff0c 有时需要通过NX 树莓派上的系统来查看调用相机 xff0c 可以通过realsense提供的realsense viewer来查看 但是机器狗自带的视觉程序会开机自启占用相机 xff0c 所以首先需要杀掉这个进程
  • 空管大数据分析平台——COSMOS

    产品简介 COSMOS是由ALTYS公司开发的专用于CNS ATM领域的一个灵活自适应航空大数据分析解决方案 xff0c 它将航空运输业带入了数字时代 系统利用飞机和地面CNS ATM系统以及其他航空系统生成的海量数据信息 xff0c 为用
  • 雷达采集卡/雷达信号采集单元 HPx-200

    产品简介 HPx 200是一款基于PCI的高性能雷达采集卡 雷达信号采集单元 xff0c 它可以捕获并处理一个到两个模拟或8比特的数字一次雷达视频 该卡可与板级支持库一起使用来采集基本的雷达信号 xff0c 或者与SPx程序库一起使用来满足
  • 雷达模拟器 SPx Radar Simulator

    产品简介 SPx Radar Simulator可产生模拟雷达视频数据 xff0c 还可以获得地形高程数据 xff0c 并利用这些数据计算模拟雷达回波 用户可自定义静态及动态目标 xff0c 将模拟雷达信号源置于某个静态位置或自定义运动轨迹
  • 无人机拉力测试台螺旋桨的正确安装方式

    在使用无人机拉力测试台测试螺旋桨的拉力 扭矩和效率时 xff0c 怎样正确安装螺旋桨才能得到最准确的测试结果 xff1f 下图示意了螺旋桨的正确安装方式 xff1a 这个测试台装置的背后理论 xff0c 经过实验验证由于测试台本身造成的障碍
  • 无人机设计过程中的计算和假设

    当我们想要设计一架新的无人机时 xff0c 首先要确定我们要设计一架什么样的无人机 xff0c 例如多大的起飞重量 几个旋翼 续航时间等 无人机工程过程通常作为 设计循环 运行 xff0c 指的是设计过程的循环性质 构建无人机的第一个版本依
  • 如何计算电机极数和无刷电机的Kv值?

    介绍 如果您正在制造无人机 遥控车或任何使用无刷直流 BLDC 电机的机器 xff0c 您可能会遇到电机极数和电机Kv值的概念 这两个参数对于表征您的电机和估计其性能都很有帮助 在本文中 xff0c 我们将介绍这些指标的含义 如何计算和衡量
  • 无人机拉力测试台:15kg级-Flight Stand 15

    产品简介 Flight Stand 15测试台是多年无人机动力系统开发经验和经历数千个用户使用反馈不断优化的成果 该测试台对无人机电机和螺旋桨的拉力 xff0c 扭矩 xff0c 转速 xff0c 电流 xff0c 电压 xff0c 温度
  • 教你编写Python抢购代码

    想买mate40 xff0c 但总是抢不到 xff0c 所以想试着能不能写个脚本代码 第一步 xff1a 把想要抢购的商品加进购物车 xff0c 注意 xff1a 脚本是对购物车内全部商品进行下单操作 xff0c 所以不够买的商品最好先从购
  • Linux C/C++UDP通信实现

    文章目录 一 UDP通信流程二 代码实现1 服务器2 客户端 一 UDP通信流程 二 代码实现 1 服务器 代码如下 xff08 示例 xff09 xff1a span class token macro property span cla