LINUX[网络编程]

sendto函数的应用:向to结构体指针指向的IP,发送UDP数据

细节请看我注释,注满细节

代码:

#include <stdio.h>

#include <sys/socket.h> //socket函数

#include <unistd.h>     //close函数

#include <string.h>     //memset strlen函数

#include <netinet/in.h> //struct sockaddr_in结构体

#include <arpa/inet.h>  //inet_pton函数

int main(int argc, char const *argv[])

{

    // 创建用于通信的UDP套接字

    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    if (sockfd == 0)

    {

        perror("socket");

        return 0;

    }

    printf("sockfd=%d\n", sockfd);

    // 发送数据函数sendto:可以向to结构体指针指向的IP,发送UDP数据

    char buf[] = "hello world";

    // 目的地址信息

    struct sockaddr_in dst_addr;

    memset(&dst_addr, 0, sizeof(dst_addr)); // memset是初始化

    dst_addr.sin_family = AF_INET;          // IPV4

    dst_addr.sin_port = htons(8000);        // 端口(port)

    //  htons的功能:将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)

    // 将目的IP赋值到地址结构体中

    inet_pton(AF_INET, "192.168.31.37", &dst_addr.sin_addr.s_addr); // 将"10.9.11.251"转到s_addr里(大端)

    char buf2[] = "你好,帅哥";

    // 如果套接字,没有事先用(bind函数)绑定固定的IP及端口

    // 那么第一次调用sendto的时候,系统会给本地主机IP,以及随机端口,作为发送者的源地址信息

    sendto(sockfd, buf, strlen(buf), 0, (const struct sockaddr *)&dst_addr, sizeof(dst_addr));

    sendto(sockfd, buf2, strlen(buf2), 0, (const struct sockaddr *)&dst_addr, sizeof(dst_addr));

    close(sockfd);

}

详细解读:

  1. 头文件包含

    • stdio.h:标准输入输出库,用于 printf 和 perror 函数。
    • sys/socket.h:包含 socket 函数的声明,用于创建套接字。
    • unistd.h:包含 close 函数的声明,用于关闭套接字。
    • string.h:包含 memset 和 strlen 函数的声明,用于内存初始化和字符串长度计算。
    • netinet/in.h:定义了 sockaddr_in 结构体,用于存储 IP 地址和端口信息。
    • arpa/inet.h:包含了一些网络编程中常用的函数,如 inet_pton
  2. 在 main 函数中

    • 创建一个 UDP 套接字 sockfd,使用 socket 函数,指定地址族为 AF_INET,类型为 SOCK_DGRAM 表示 UDP 套接字。
    • 如果 socket 函数返回值为 0,表示创建套接字失败,输出错误信息并返回。
    • 初始化一个发送的数据 buf,内容为 "hello world"。
    • 初始化目的地址信息 dst_addr 结构体,将其清零并设置地址族为 AF_INET,端口为 8000。
    • 使用 inet_pton 将目的IP地址 "192.168.31.37" 转换为网络字节序并赋值给 dst_addr.sin_addr.s_addr
    • 初始化另一个发送的数据 buf2,内容为 "你好,帅哥"。
    • 调用 sendto 函数两次,分别发送 buf 和 buf2 的数据到目的地址 dst_addr
    • 最后关闭套接字 sockfd

这段代码通过 UDP 协议向指定的 IP 地址("192.168.31.37")的端口 8000 发送了两个数据包,分别是 "hello world" 和 "你好,帅哥"。发送数据时使用了 sendto 函数,该函数可以发送数据到指定的目的地址。在网络编程中,UDP 是一种无连接的传输协议,发送数据时不需要建立连接,适用于一些要求实时性较高的场景。

最后完毕:

        说说我的感觉,md,真不喜欢学习,还是自己已掌握的领域才能让自己感觉舒服,感觉自己才是领导者,老师傅;工科没出路,高级打工人

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/549139.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【c语言】结构体的访问

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

记录 OpenHarmony 使用 request.uploadFile 时踩的坑

​ 开发环境 设备环境&#xff1a;OpenHarmony 4.1.x SDK 版本&#xff1a;API 10 开发模型&#xff1a;Stage 模型 IDLE: Dev Eco 4.1 官方文档 踩坑一&#xff1a;后台服务地址 上传文件依赖后台服务器&#xff0c;如果使用本地搭建的服务&#xff0c;是无法访问的&…

两部电话机怎样能实现对讲?直接连接能互相通话吗?门卫门房传达室岗亭电话怎么搞?

目录 两部电话机能直接连接吗&#xff1f;用三通头分出来一条电话线两部电话机用一根电话线直接连接能互相通话吗&#xff1f; 什么电话机可以直接连接两部IP电话机&#xff08;网络电话机&#xff09;可以直接连接两部普通电话机之间通过一个电话交换机也可以连接跨区域的两部…

Avalonia中嵌入网页程序(CefNet)

Avalonia中嵌入网页程序cefNet 1. 引入CefNetNuget包2. 下载 cef 基础环境3. 将cef基础环境放入程序运行目录下4. 代码中初始化cef5. 添加Webview控件6. 在窗口关闭的时候释放Cef7. 项目结构图CefNet 开源的作者已经停止维护并删除了原始的代码库:GetHub:CefNet,Nuget上还有发…

【简单介绍下单片机】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Python编程之旅:深入探索强大的容器——列表

在Python编程的世界中&#xff0c;容器&#xff08;Containers&#xff09;是一种用于存储多个项目的数据结构。其中&#xff0c;列表&#xff08;List&#xff09;是最常用且功能强大的容器之一。无论是初学者还是资深开发者&#xff0c;掌握列表的使用方法和技巧都是提升Pyth…

引导和服务(2)

服务 1.systemd服务的简要介绍 &#xff08;1&#xff09;对比5 6 可以解决依赖关系并行启动 &#xff08;2&#xff09;按需启动 &#xff08;3&#xff09;自动解决依赖关系 负责在系统启动或运行时&#xff0c;激活系统资源&#xff0c;服务器进程和其它进程 2.System…

Python 处理地理空间异常值:基于 MAD 的简单方法

就像任何其他数据一样,在处理地理空间数据时,识别和纠正异常值是数据准备中的关键步骤,可确保任何后续分析的准确性。异常值可能会严重扭曲空间分析的结果,从而导致错误的结论。虽然还有其他方法可以解决此问题,但处理这些异常值的一种直接有效的方法是使用中值绝对偏差 (…

第十一届土木与城市工程国际会议(ICCUE 2024)即将召开!

第十一届土木与城市工程国际会议&#xff08;ICCUE 2024&#xff09;将于2024年8月20-22日在意大利罗马召开。土木与城市工程&#xff0c;作为人类社会发展的重要基石&#xff0c;承载着推动城市繁荣、提升人民生活质量的重任。ICCUE 2024的召开&#xff0c;旨在搭建一个国际化…

HDLbits 刷题 --Mux2to1

Create a one-bit wide, 2-to-1 multiplexer. When sel0, choose a. When sel1, choose b. 译&#xff1a; 创建一个1位宽的2对1多路复用器。当sel0时&#xff0c;选择a。当sel1时&#xff0c;选择b。 个人解法&#xff1a; module top_module( input a, b, sel,output out …

IO流-IO框架

简介 java的IO流操作提供了最简单的操作&#xff0c;第三方基于日常使用习惯&#xff0c;写了很多IO框架&#xff0c;更加方便操作避免重复造轮子&#xff0c;提高开发效率 Commons-io 简介 Commons-io是apche提供的IO操作的小框架 部分常用的API 引入依赖 <dependency>…

mbti,ESFP型人格的心理问题分析

什么是ESFP型人格&#xff1f; ESFP分别代表的是外向&#xff0c;实感&#xff0c;情感和依赖&#xff0c;ESFP型人格则是一种性格上活泼开朗&#xff0c;富有同情心的一种性格&#xff0c;具有这种人格的人在日常生活当中&#xff0c;社交能力十分突出&#xff0c;活泼开朗&a…

高级IO和5种IO模型

目录 1. 高级IO1.1 IO的基本概念1.2 OS如何得知外设当中有数据可读取1.3 OS如何处理从网卡中读取到的数据包1.4 IO的步骤 2. 五种IO模型2.1 利用钓鱼来理解2.2 阻塞IO2.3 非阻塞IO2.4 信号驱动IO2.5 IO多路转接2.6 异步IO 3. 高级IO的概念3.1 同步通信 VS 异步通信3.2 阻塞 VS …

《剑指 Offer》专项突破版 - 面试题 107 : 矩阵中的距离(C++ 实现)

题目链接&#xff1a;矩阵中的距离 题目&#xff1a; 输入一个由 0、1 组成的矩阵 M&#xff0c;请输出一个大小相同的矩阵 D&#xff0c;矩阵 D 中的每个格子是矩阵 M 中对应格子离最近的 0 的距离。水平或竖直方向相邻的两个格子的距离为 1。假设矩阵 M 中至少有一个 0。 …

JavaEE:HTTP协议

基本内容 网站 后端&#xff08;HTTP服务器&#xff09; 前端&#xff08;浏览器&#xff09;&#xff0c;而后端和前端都需要遵循HTTP协议 HTTP属于超文本传输协议&#xff0c;存在于应用层 文本&#xff1a;一般能在utf8或者gbk上找到的合法字符串 超文本&#xff1a;不仅…

Jmeter 性能-死锁问题定位+分析

1、环境搭建 ①准备脚本&#xff0c;执行压测 ②用Jstack 打印日志 jstack 112759 >dead.log ③下载日志到本地 sz dead.log 2、问题定位 ①打开dead.log&#xff0c;搜索deadlock ②查看死锁的线程 ③查看死锁位置 3、问题分析 ①下载死锁的类文件 Sz CaseControlle…

为什么公共云的弹性能力很难被发挥出来?

作者&#xff5c;王小瑞 AutoMQ 联合创始人 & CEO 云计算通过资源池化实现单位资源成本更优&#xff0c;使企业能够将 IDC 建设、基础软件研发和运维等工作外包给云厂商&#xff0c;从而更专注于业务创新。资源池不仅包括服务器&#xff0c;还包括人才。云厂商集聚了优秀…

Java链式编程

一&#xff1a;链式编程 可以简化编程。代码简洁。 定义&#xff1a; 链式编程&#xff1a;顾名思义&#xff0c;链子嘛。它是一种编程范式&#xff0c;它允许将多个函数或操作连接在一起&#xff0c;形成一个链条&#xff0c;以执行复杂的操作。 优点&#xff1a; 编程性…

酒店水电智能化管理解决方案

在酒店行业中&#xff0c;水电能源的高效管理是实现可持续发展与降低运营成本的关键。酒店水电智能化管理解决方案通过运用先进技术&#xff0c;实现了对酒店水电资源的高效、智能监控与管理。本文将从解决方案的背景、核心技术以及带来的效益三个方面全面介绍该解决方案。 解…

快速掌握乡村振兴展厅设计要点,打造令人瞩目的展示效果!

基于数字多媒体技术研发的多媒体互动装置&#xff0c;给展览展示行业带来了巨大的创新和改变&#xff0c;这种将现代科技与传统展厅相融合的展示形式&#xff0c;做到了一馆多用的功能建设&#xff0c;而这一特性也为乡村文化和历史传承提供了更好的平台。那么&#xff0c;下面…
最新文章