linux网络编程之udp

2023-05-16

这里写目录标题

  • UDP服务器代码
  • UDP客服端代码
  • 结果

UDP服务器代码

ucp_ser.c

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <strings.h>
#include <string.h>
#define SER_PORT 5001
#define SER_ADDR "192.168.11.128"
#define BUFSIZE 1024
#define QUIT_STR "QUIT"

void main()
{       //1.创建一个套接字
        int sockfd;
        sockfd=socket(AF_INET,SOCK_DGRAM,0);
        if(sockfd < 0)
        {
                perror("sockfd");
                exit(1);
        }
        int b_reuser=-1;
        setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&b_reuser,sizeof(int));//一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。

        //2.bind函数绑定网络地址
        struct sockaddr_in myaddr;
        myaddr.sin_family=AF_INET;
        myaddr.sin_port=htons(SER_PORT);
        myaddr.sin_addr.s_addr=htonl(INADDR_ANY);
        bind(sockfd,(struct sockaddr *)&myaddr,sizeof(myaddr));

        char buf[BUFSIZE];
        struct sockaddr_in recaddr;
        socklen_t addrlen=sizeof(recaddr);
        while(1)
        {
                bzero(buf,BUFSIZE);
                if(recvfrom(sockfd,buf,BUFSIZE-1,0,(struct sockaddr *)&recaddr,&addrlen)<0)
                {
                        perror("recvfrom");
                        exit(1);
                }
                char ipv4_addr[16];
 if(!inet_ntop(AF_INET,(void *)&recaddr.sin_addr,ipv4_addr,sizeof(recaddr)))
                {
                        perror("inet_ntop");
                        exit(1);
                }
                printf("receive from(%s,%d),data:%s\n",ipv4_addr,htons(recaddr.sin_port),buf);
                if(!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR)))
                {
                        printf("client(%s,%d),is exiting\n",ipv4_addr,htons(recaddr.sin_port));
                        exit(1);
                }
        }
}


UDP客服端代码

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <strings.h>
#include <string.h>

#define QUIT_STR "QUIT"
#define BUFSIZE 1024
void main(int arc,char **arg)
{
        if(arc != 3)
        {
                exit(1);
        }
        //1.创建套接字
        int sockfd;
        sockfd=socket(AF_INET,SOCK_DGRAM,0);
        //确定要将数据发送到哪个服务器
        int port;
        port=atoi(arg[2]);//将字符串转化为整形变量
        struct sockaddr_in addr;
        addr.sin_family=AF_INET;
        addr.sin_port=htons(port);
        addr.sin_addr.s_addr=inet_addr(arg[1]);
        char buf[BUFSIZE];

        while(1)
        {
                if(fgets(buf,BUFSIZE-1,stdin)==NULL)
                {
                        perror("fgets");
                        exit(1);
                }
                sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&addr,sizeof(addr));
                if(!strncasecmp(buf,QUIT_STR,sizeof(QUIT_STR)))
                {
                        printf("client is exited\n");
                        exit(1);
                }

        }
}                                                            

结果

请添加图片描述
udp是无连接的,每次发送数据都要指定目的地址。

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

linux网络编程之udp 的相关文章

  • win10安装Ubuntu16.04

    第一次安装双系统 xff0c 踩了不少坑 xff0c 花了两三天才装好 xff0c 因为电脑的不同 xff08 本人电脑联想小新i5 xff09 xff0c 网上那些安装过程有些不适用 xff0c 所以花了好长时间 xff0c 甚至差点决定
  • 12道C++经典笔试题及答案(2022)

    目录 一 题目 二 题目以及答案 一 题目 1 C和C 43 43 中的struct有什么区别 2 C 43 43 中的struct和class有什么区别 xff1f 3 如何判断一段程序是由C编译程序还是由C 43 43 编译程序的 xf
  • Java开发者出路在哪?牛皮轰轰

    正文 先问小伙伴们一个问题 xff0c 登录难吗 xff1f 登录有什么难得 xff1f 输入用户名和密码 xff0c 后台检索出来 xff0c 校验一下不就行了 凡是这样回答的小伙伴 xff0c 你明显就是产品思维 xff0c 登录看似简
  • 我阿里P7了解到的Android面试的一些小内幕!已拿offer

    前言 这些题目是网友去百度 小米 乐视 美团 58 猎豹 360 新浪 搜狐等一线互联网公司面试被问到的题目 熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率 欢迎一线公司员工以及网友提交面试题库 xff0c 欢迎留言 网上的都是按
  • Autoware激光雷达建图流程

    首先导入录制的包 点击 Play 按钮播放数据 xff0c 然后再点击 Pause 暂停播放 设置从base link到velodyne坐标系的TF 在 Baselink to Localizer 中设置好各个参数之后点击 TF 按钮 xf
  • Xshell连接不上虚拟机的解决办法

    目录 一 xff0c 首先检查对应的会话信息是否正确 二 xff0c 检查网络配置 三 xff0c 防火墙是否关闭 四 xff0c ssh服务是否开启 五 xff1a 更改网关 一 xff0c 首先检查对应的会话信息是否正确 xff08 1
  • 如何介绍简历中的项目呢?请看软件测试老师的分享

    项目经验与工作经验是相辅相成的 xff0c 但较之于工作经验 xff0c 项目经验更侧重于表现求职者在某个专业领域内的技能水平 xff08 技能水平决定了工资水平 xff09 因而 xff0c 技术类岗招聘的时候 xff0c 更注重项目经验
  • 正点原子飞控——代码学习笔记(一)

    手柄代码篇 我们直接看代码部分 xff0c 然后逐步深入了解 xff0c 如有不对的地方 xff0c 欢迎大家指证 xff01 xff01 第一阶段 设备内部的初始化 一 中断配置初始化 span class token macro pro
  • Ros安装

    前提 xff1a 若要安装ros xff0c 首先需要配置Ubuntu系统允许restricted xff08 不完全的自由软件 xff09 universe xff08 Ubuntu官方不提供支持和补丁 xff0c 全靠社区支持 xff0
  • 【mySQL】mysql数据库分页查询讨论专题

    目录 一 limit分页公式 总页数公式 1 limit分页公式 2 总页数公式 二 Mysql的三种分页方法 1 limit m n分页语句 xff08 低效 xff09 2 limit m语句 xff08 有局限 xff09 三 查询优
  • STM32——SysTick 定时器讲解(代码)

    一 SysTick 系统定时器简介 SysTick 系统定时器是属于CM3内核中的一个外设 xff0c 内嵌在NVIC中 系统定时器是一个24bit的向下递减的计数器 xff0c 计数器每计数一次的时间为1 SYSCLK xff0c 一般我
  • 第七届全国大学生工程训练综合能力竞赛(工训赛) 智能配送无人机赛项 省赛心得

    第七届全国大学生工程训练综合能力竞赛 xff08 工训赛 xff09 智能配送无人机赛项 省赛心得 第七届全国大学生工程训练综合能力竞赛 xff08 工训赛 江西省赛 在华东交通大学落下帷幕 至此 xff0c 为时四个多月的备赛阶段终于告一
  • 编译mavlink-router

    1 首先安装meson ninjia gcc g 43 43 等工具 xff1a sudo apt install git meson ninjia build pkg config gcc g 43 43 system 可能会出现一下错误
  • nx板卡rtsp推流,pc端拉流

    jetson板卡推流 xff1a 安装gstreamer 步骤 xff1a sudo apt get install gtk doc tools sudo apt get install libgstreamer plugins base1
  • Linux中apt与apt-get命令的区别

    apt和apt get命令之间的区别 apt get 并不能完全向下兼容 apt get 命令 可以用 apt 替换部分 apt get 系列命令 xff0c 但不是全部 apt 命令取代的命令命令的功能apt installapt get
  • Ubuntu 切换为root用户

    下述命令来自于https blog csdn net fmyzc article details 79487643 sudo 43 命令 xff0c 输入当前用户密码后以root权限执行命令 xff0c 有时间限制且仅限当前命令 sudo
  • build-essential包

    build essential的作用 Ubuntu 上一般自带的 xff0c 不需要安装 xff1a alexander 64 Darrykinger sudo apt get install build essential 正在读取软件包
  • Cubli_Mini项目

    GitHub ZhaJiHu Cubli Mini 刷到这个 xff0c 想自己制作一个 芯片介绍 xff1a 电机小板 xff1a AS5600 ASOT AS5600 磁编码器使用心得及总结 越吃越胖的黄的博客 CSDN博客 as560
  • Vi/Vim 编辑器常见命令

    Vim的三种模式 经过以上的使用演示 xff0c 我们体验到了Vim编辑器的三种工作模式 xff1a 一般模式 xff08 normal mode xff09 xff1a 一般模式用来浏览文本 xff0c 查找内容 xff0c 但是不可以编
  • make oldconfig && make prepare

    Ubuntu编译开发板驱动时遇到 mac 64 mac virtual machine driver test test 1 ls led test Makefile mac 64 mac virtual machine driver te

随机推荐

  • 【Linux】资源查看top显示信息说明|top、iftop、iotop、htop、atop工具

    目录 一 Top 1 Top返回结果说明 统计信息区说明 进程信息区说明 2 Top交互操作 更改显示项目 更改排序顺序 过滤 3 top使用格式 4 附常用操作命令 二 查看磁盘 IO 性能 1 1 top 命令 1 2 sar 命令 1
  • raw_copy_to_user和 copy_to_user区别

    mac 64 ubuntu driver test 1 driver make make C home mac driver test preparation linux nano 5 2 tf M 61 home mac driver t
  • 以镜像的方式备份整张TF卡备份

    准备 待备份的TF卡 读卡器 Linux电脑 需在Linux系统下操作 xff0c 电脑磁盘空间需大于TF卡存储空间 步骤 1 插入TF卡 xff0c 执行以下命令 xff0c 查看TF卡磁盘号 sudo parted l 1 2 在roo
  • Linux scp命令

    Linux scp命令 菜鸟教程 Linux scp命令 Linux 命令大全 Linux scp 命令用于 Linux 之间复制文件和目录 scp 是 secure copy 的缩写 scp 是 linux 系统下基于 ssh 登陆进行安
  • stm32+mxl90614测温+蓝牙app数据实时显示折线图+syn6288语音播报体温+oled显示

    设计要求 xff1a stm32主控 mxl90614实现测温功能 蓝牙发送数据到手机app界面实时显示数据变换 xff0c 折线图形式 syn6288语音播报当前体温数据 效果展示 qq1633003977 源码 链接 xff1a htt
  • HY-SRF05超声波测距模块的使用

    HY SRF05超声波测距模块的使用 测距模块介绍 VCC和GND 接电源的正负极 xff0c 也可接单片机的5V或3 3V xff0c 注意与单片机共地Trig xff1a 触发控制信号输入 通过这个引脚输入10us以上的高电平触发信号
  • SG90 180°舵机的使用

    SG90 180 舵机的使用 SG90的介绍 舵机是一种位置 xff08 角度 xff09 伺服的驱动器 xff0c 适用于需要角度不断变化并可以保持的控制系统 xff0c 可以根据控制信号来输出指定的角度 xff08 常见的有0 90 0
  • 蓝牙模块的使用

    蓝牙模块的连接与使用 蓝牙模块的介绍 蓝牙模块可通过与单片机的串口相连 xff0c 借助电脑或手机的蓝牙与单片机实现异步全双工通信 常见的蓝牙模块有HC 05主从一体蓝牙模块 HC 06从机蓝牙模块 低功耗BLE蓝牙模块 cc2540或cc
  • PID算法的原理和公式

    PID算法的原理和公式 64 PID PID算法原理 P xff1a 即Proportion xff0c 输入偏差乘以比例常数I xff1a 即Integral xff0c 对输入偏差进行积分运算D xff1a 即Derivative xf
  • PID控制器中的常见问题

    PID控制器中的常见问题 64 PID PID各部分的作用 P控制器 P控制器不能让稳态误差为零 xff0c 然而随着增大 K p Kp K p 参数 xff0c 可以减小稳态误差 稳态误差是系统从一个稳态过渡到新的稳态 xff0c 或系统
  • PID串级控制

    PID串级控制 64 PID 串级控制的基本环路模型 串级控制包含了主控制器和从控制器两个独立的部分 xff0c 其中从控制器的控制变量是由主控制器回路得到的 xff0c 主控制决定了次控制回路的设定值 即从控制器的设定值是主控制器的的输出
  • ocos 信号量

    信号量分为 xff1a 声明信号量 互斥信号量 转 xff1a ucos ii学习笔记 信号量的原理 ucos ii学习笔记 信号量的原理及使用 include 34 INCLUDES h 34 define TASK STK SIZE 5
  • PID调谐方法:根据开环响应特性调谐(一)

    PID调谐方法 xff1a 根据开环响应特性调谐 xff08 一 xff09 64 PID Ziegler Nichols method xff1a 首先将积分和微分增益设置为0 xff0c 然后比例增益从零开始逐渐增加 xff0c 直到到
  • PID调谐方法:根据开环响应特性调谐(二)

    PID调谐方法 xff1a 根据开环响应特性调谐 xff08 二 xff09 64 PID 齐格勒 尼科尔斯和科恩 库恩方法的一个问题是 xff0c 它们会产生一组相当激进的增益 xff0c 这可能导致不稳定 xff08 或稳定性裕度降低
  • STM32 串口的使用

    STM32 串口的使用 以串口调试助手为例 64 STM32基本外设 串口介绍 USART Universal Synchronous Asynchronous Receiver and Transmitter 通用同步异步收发器 是一 个
  • 中断里使用延时函数

    中断里使用延时函数 64 STM32和MSP432常见问题 STM32 在实际应用中发现 xff0c 在STM32的中断里使用延时函数HAL Delay Delay 容易出现问题 与SysTick中断的优先级 xff0c 故采用while
  • Python中的PID库

    Python中的PID库 64 树莓派学习笔记 PID 加入了条件积分抗积分饱和 xff0c 加入了一阶低通滤波滤除高频噪声 链接 xff1a https github com EduardoNigro Things DAQ Code bl
  • 数字信号处理上机实验一

    数字信号处理上机实验一 给定信号 x n 61
  • 如何使用arduino 更改传感器寄存器的内容,这里以更改MLX90614的地址为例

    这里参考了这篇文章 xff08 ARDUINO使用MLX90614红外温度传感器研究笔记 雨田大大的博客 CSDN博客 mlx90614红外传感器 xff09 xff0c 构建了一个修改地址的程序关于crc校验的部分 xff08 CRC x
  • linux网络编程之udp

    这里写目录标题 UDP服务器代码UDP客服端代码结果 UDP服务器代码 ucp ser c span class token macro property span class token directive hash span span