当前位置: 首页 > wzjs >正文

我是怎么做网站架构的网站域名后缀代表什么意思

我是怎么做网站架构的,网站域名后缀代表什么意思,怎么向google提交网站,石家庄做网站汉狮网络UDP 通信详解:sendto 和 recvfrom 的使用 1. 概述 UDP(User Datagram Protocol)是一种无连接、不可靠的传输层协议,适用于对实时性要求高但允许少量丢包的场景(如视频流、DNS 查询)。与 TCP 不同&#xff…

UDP 通信详解:sendtorecvfrom 的使用

1. 概述
UDP(User Datagram Protocol)是一种无连接、不可靠的传输层协议,适用于对实时性要求高但允许少量丢包的场景(如视频流、DNS 查询)。与 TCP 不同,UDP 不需要建立连接,直接通过 sendtorecvfrom 发送和接收数据。

本文将详细介绍:
sendtorecvfrom 的函数原型及参数

• UDP 通信的基本流程

• 完整的服务器端和客户端代码示例


2. sendto 函数
sendto 用于通过 UDP 套接字 发送数据。

函数原型

#include <sys/socket.h>ssize_t sendto(int sockfd,                   // 套接字文件描述符const void *buf,              // 待发送数据的缓冲区size_t len,                   // 数据长度int flags,                    // 标志位(通常设为 0)const struct sockaddr *dest_addr, // 目标地址socklen_t addrlen             // 目标地址长度
);

参数说明

参数说明
sockfd已创建的 UDP 套接字
buf指向待发送数据的缓冲区
len数据长度(字节数)
flags控制发送行为(通常设为 0
dest_addr目标地址(struct sockaddr_instruct sockaddr
addrlen目标地址结构体的大小

返回值
• 成功:返回实际发送的字节数

• 失败:返回 -1,并设置 errno

示例

struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);       // 目标端口
inet_aton("127.0.0.1", &server_addr.sin_addr); // 目标 IPchar *msg = "Hello, UDP Server!";
sendto(sockfd, msg, strlen(msg), 0,(struct sockaddr *)&server_addr, sizeof(server_addr));

3. recvfrom 函数
recvfrom 用于通过 UDP 套接字 接收数据。

函数原型

#include <sys/socket.h>ssize_t recvfrom(int sockfd,                   // 套接字文件描述符void *buf,                    // 接收数据的缓冲区size_t len,                   // 缓冲区最大长度int flags,                    // 标志位(通常设为 0)struct sockaddr *src_addr,    // 存储发送方地址socklen_t *addrlen            // 指向地址长度的指针
);

参数说明

参数说明
sockfd已绑定的 UDP 套接字
buf接收数据的缓冲区
len缓冲区最大长度
flags控制接收行为(通常设为 0
src_addr存储发送方的地址信息(NULL 表示不关心)
addrlen指向 src_addr 长度的指针

返回值
• 成功:返回接收的字节数

• 失败:返回 -1,并设置 errno

示例

struct sockaddr_in client_addr;
socklen_t addr_len = sizeof(client_addr);
char buf[1024];ssize_t recv_len = recvfrom(sockfd, buf, sizeof(buf), 0,(struct sockaddr *)&client_addr, &addr_len);
if (recv_len > 0) {printf("Received from %s:%d: %s\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port),buf);
}

4. UDP 通信流程
UDP 通信的基本流程如下:

  1. 服务器端:
    • 创建套接字(socket

    • 绑定地址(bind

    • 接收数据(recvfrom

    • 发送数据(sendto

  2. 客户端:
    • 创建套接字(socket

    • 发送数据(sendto

    • 接收数据(recvfrom

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


5. 完整代码示例
5.1 服务器端代码

#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>int main(int argc, char *argv[]) {if (argc < 3) {fprintf(stderr, "Usage: %s <IP> <PORT>\n", argv[0]);exit(EXIT_FAILURE);}// 1. 创建 UDP 套接字int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (sockfd < 0) {perror("socket");exit(EXIT_FAILURE);}// 2. 绑定地址struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(atoi(argv[2]));if (inet_aton(argv[1], &addr.sin_addr) == 0) {fprintf(stderr, "Invalid IP address\n");exit(EXIT_FAILURE);}if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {perror("bind");exit(EXIT_FAILURE);}printf("Server running on %s:%s\n", argv[1], argv[2]);// 3. 接收数据char buf[1024];struct sockaddr_in client_addr;socklen_t addr_len = sizeof(client_addr);while (1) {memset(buf, 0, sizeof(buf));ssize_t recv_len = recvfrom(sockfd, buf, sizeof(buf), 0,(struct sockaddr *)&client_addr, &addr_len);if (recv_len > 0) {printf("Received from %s:%d: %s\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port),buf);}}close(sockfd);return 0;
}

5.2 客户端代码

#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>int main(int argc, char *argv[]) {if (argc < 3) {fprintf(stderr, "Usage: %s <IP> <PORT>\n", argv[0]);exit(EXIT_FAILURE);}// 1. 创建 UDP 套接字int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (sockfd < 0) {perror("socket");exit(EXIT_FAILURE);}// 2. 设置目标地址struct sockaddr_in server_addr;memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(atoi(argv[2]));if (inet_aton(argv[1], &server_addr.sin_addr) == 0) {fprintf(stderr, "Invalid IP address\n");exit(EXIT_FAILURE);}// 3. 发送数据char buf[1024];while (1) {printf("Input message: ");fgets(buf, sizeof(buf), stdin);buf[strlen(buf) - 1] = '\0';  // 去掉换行符sendto(sockfd, buf, strlen(buf), 0,(struct sockaddr *)&server_addr, sizeof(server_addr));}close(sockfd);return 0;
}

文章转载自:

http://pmmZfBL0.bsjxh.cn
http://lnmDn0KW.bsjxh.cn
http://9F3Ydmgv.bsjxh.cn
http://5Lz2ya8z.bsjxh.cn
http://fx13nhM9.bsjxh.cn
http://LDoKyVVj.bsjxh.cn
http://8CTrRAQY.bsjxh.cn
http://YbO97T3J.bsjxh.cn
http://IlLDAKIK.bsjxh.cn
http://VyyU1scp.bsjxh.cn
http://muzwlpHN.bsjxh.cn
http://IbNwK3JZ.bsjxh.cn
http://cKUziXsp.bsjxh.cn
http://kM0xdAzt.bsjxh.cn
http://IHP7lteu.bsjxh.cn
http://9sQsTIlb.bsjxh.cn
http://S4pYejl0.bsjxh.cn
http://fOFCAjy9.bsjxh.cn
http://nqQ7qg4a.bsjxh.cn
http://t8mfi2Zt.bsjxh.cn
http://F9SO95j9.bsjxh.cn
http://RiQhtffv.bsjxh.cn
http://FqIEYREy.bsjxh.cn
http://vDYYVxlj.bsjxh.cn
http://Mbf1b0b9.bsjxh.cn
http://WVOkzEJR.bsjxh.cn
http://RDreTTD5.bsjxh.cn
http://rgFsVvRH.bsjxh.cn
http://rUyQ4VIC.bsjxh.cn
http://UsJxgBcg.bsjxh.cn
http://www.dtcms.com/wzjs/729597.html

相关文章:

  • 网站频道与栏目的区别合肥网站建设过程
  • 宁远县做网站的北京网站建设设计
  • 网站建设工作的函wordpress分页调用代码
  • 昆山做网站图书馆网站参考咨询建设
  • 如何建设成为营销网站计算机网络专业主要学什么
  • cms网站网络地址图片好看的网页源码
  • 免费做淘客cms网站视频推广渠道
  • 京东网站建设案例一级造价工程师教材
  • 简历网站后怎样才能被谷歌 百度收录吗建筑工程网布设
  • 网站搭建备案吗VPS如何做镜像网站
  • 网站开发外包东莞企业网站排名优化
  • 如何做网站计数器wordpress个人博客主题
  • html做网站例子网站后台网址后缀
  • jquery 个人网站做企业网站模板可以seo
  • 网页制作与网站建设实战大全 豆瓣如何自己做自己的网站
  • 离职同事以公司名义做网站做自媒体一般都注册几个网站
  • 自己创网站php怎么做网站快
  • 重庆 手机网站制作网络运维主要做什么
  • 网站设计工具在手机上创建网站
  • 网站用图怎么做文件小质量高ios网页游戏
  • 还有河北城乡和住房建设厅网站吗群晖打开wordpress4.9.8
  • 做儿童业态招商要去哪些网站互联网广告行业前景
  • 黄埔做网站长春网络推广公司哪个好
  • 网站建设推广服务合同开做网站的公司 条件
  • 西安网站注册网络公司网络推广服务
  • 网站建设标新立异seo的搜索排名影响因素有哪些
  • 外包网站建设公司手机 网站 源码
  • 做景区网站建设的公司长三角旅游推广联盟
  • 创建众筹网站伴奏网站防盗是怎么做的
  • 工业部网站备案河南网站制作