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:标准输入输出库,用于 printfperror 函数。
    • sys/socket.h:包含 socket 函数的声明,用于创建套接字。
    • unistd.h:包含 close 函数的声明,用于关闭套接字。
    • string.h:包含 memsetstrlen 函数的声明,用于内存初始化和字符串长度计算。
    • 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 函数两次,分别发送 bufbuf2 的数据到目的地址 dst_addr
    • 最后关闭套接字 sockfd

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

最后完毕:

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

相关推荐
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao3 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush44 天前
嵌入式linux学习记录十四、术语
linux·嵌入式