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

建设银行的网站用户名是什么意思闪闪字体设计网页

建设银行的网站用户名是什么意思,闪闪字体设计网页,中文网址和中文域名,制作充值网站UDP概念编程流程 目录 一、UDP基本概念 1.1 概念 1.2 特点 1.2.1 无连接性: 1.2.2 不可靠性 1.2.3 面向报文 二、UDP编程流程 2.1 客户端 cli.c 2.2 服务端ser.c 一、UDP基本概念 1.1 概念 UDP 即用户数据报协议(User Datagram Protocol &…

UDP概念+编程流程

目录

一、UDP基本概念

1.1 概念

1.2 特点

1.2.1 无连接性:

1.2.2 不可靠性

1.2.3 面向报文

二、UDP编程流程

2.1 客户端 cli.c

2.2 服务端ser.c


一、UDP基本概念

1.1 概念

UDP 即用户数据报协议(User Datagram Protocol ) ,是 OSI 参考模型中一种无连接的传输层协议,提供的是无连接,不可靠,数据报服务。

1.2 特点

1.2.1 无连接性:

UDP 传输数据之前源端和终端不建立连接,发送方直接将数据打包成 UDP 数据报发送到网络上,无需等待接收方确认,减少了开销和发送数据前的时延 。比如在线游戏中,玩家操作指令频繁发送,使用 UDP 可快速将指令发出,无需建立连接等待 。

1.2.2 不可靠性

UDP 不保证数据的可靠传输,不提供报文到达确认、排序及流量控制等功能 ,也没有数据包重传机制和错误恢复机制 。若传输中数据包丢失、损坏或乱序,UDP 不会自动处理 。像网络视频会议,偶尔丢包对整体影响不大,更看重实时性,就适合用 UDP 。

1.2.3 面向报文

UDP 对应用程序交下来的报文,在添加首部后就向下交付给 IP 层,既不拆分也不合并,保留报文边界 。这要求应用程序选择合适报文大小 。

二、UDP编程流程

2.1 客户端 cli.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>int main()
{// 创建一个 UDP 套接字,AF_INET 表示使用 IPv4 地址族,SOCK_DGRAM 表示使用 UDP 协议int sockfd = socket(AF_INET,SOCK_DGRAM,0); // 检查套接字是否创建成功,如果创建失败(返回值为 -1),则终止程序if( sockfd == -1 ) {exit(1);}// 定义一个 IPv4 套接字地址结构体,用于存储服务器地址信息struct sockaddr_in saddr; // 将服务器地址结构体 saddr 的内存空间清零memset(&saddr,0,sizeof(saddr)); // 设置地址族为 IPv4saddr.sin_family = AF_INET; // 将端口号 6000 从主机字节序转换为网络字节序saddr.sin_port = htons(6000); // 将 IP 地址 "127.0.0.1" 从点分十进制字符串转换为网络字节序的二进制数saddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 进入无限循环,用于持续进行数据的发送和接收操作while( 1 ) {// 提示用户输入信息printf("input:\n"); // 定义一个字符数组,用于存储用户输入的数据,大小为 128 字节char buff[128] = {0}; // 从标准输入(键盘)读取一行数据到 buff 数组中,最多读取 128 个字符fgets(buff,128,stdin); // 检查用户输入的内容是否以 "end" 开头,如果是则跳出循环if( strncmp(buff,"end",3) == 0) {break;}// 向服务器地址发送数据,strlen(buff) - 1 是去掉 fgets 读取时包含的换行符sendto(sockfd,buff,strlen(buff)-1,0,(struct sockaddr*)&saddr,sizeof(saddr)); // 将字符数组 buff 的内容清零,为下次接收数据做准备memset(buff,0,128); // 初始化地址结构体长度变量,用于存储从服务器接收数据时地址结构体的长度int len = sizeof(saddr); // 从服务器接收数据,存储到 buff 数组中recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len); // 打印接收到的数据printf("buff=%s\n",buff); }// 关闭套接字,释放相关资源close(sockfd); // 正常终止程序exit(0); 
}

sendto(sockfd,buff,strlen(buff)-1,0,(struct sockaddr*)&saddr,sizeof(saddr));

  • 函数作用sendto 是用于在 UDP 套接字上发送数据的函数。它可以将数据发送到指定的目标地址。
  • 参数解释
    • sockfd:之前创建好的 UDP 套接字描述符,通过它来确定使用哪个套接字发送数据。
    • buff:这是一个字符数组,存储着要发送的数据内容,也就是用户通过 fgets 从标准输入获取并准备发送给服务器的数据。
    • strlen(buff) - 1strlen 函数用于获取 buff 中字符串的长度。因为 fgets 函数读取输入时会把换行符 \n 也读取到 buff 数组中,而实际发送数据时通常不需要这个换行符,所以减去 1 来去掉它 。这个值表示实际要发送的数据长度。
    • 0:表示发送数据时的标志位,这里设置为 0 表示没有特殊的发送选项。
    • (struct sockaddr*)&saddr:将服务器地址结构体 saddr 的指针强制转换为通用的 sockaddr 指针类型,用于指定数据要发送到的目标地址,这里就是服务器的地址。
    • sizeof(saddr):表示目标地址结构体 saddr 的大小,用于告诉 sendto 函数地址信息占用的字节数。

recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);

  • 函数作用recvfrom 是用于在 UDP 套接字上接收数据的函数,同时它还能获取发送方的地址信息。
  • 参数解释
    • sockfd:UDP 套接字描述符,通过它确定从哪个套接字接收数据。
    • buff:用于存储接收到的数据的字符数组,这里它的大小为 128 ,但实际接收数据时预留 1 个字节用于存储字符串结束符 \0 ,所以指定接收长度为 127 。
    • 0:接收数据时的标志位,设置为 0 表示没有特殊接收选项。
    • (struct sockaddr*)&saddr:用于存储发送方(客户端)地址信息的结构体指针,将其强制转换为通用的 sockaddr 指针类型。在函数执行过程中,它会被填充为实际发送数据的客户端的地址信息。
    • &len:是一个指向表示地址结构体长度变量的指针。recvfrom 函数会根据实际接收到的地址信息长度来更新这个变量的值。

2.2 服务端ser.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>int main()
{// 创建一个 UDP 套接字,AF_INET 表示使用 IPv4 地址族,SOCK_DGRAM 表示 UDP 协议int sockfd = socket(AF_INET,SOCK_DGRAM,0); // 检查套接字是否创建成功,若失败(返回 -1)则退出程序if( -1 == sockfd){exit(1);}// 定义两个 IPv4 套接字地址结构体,saddr 用于服务器地址,caddr 用于客户端地址struct sockaddr_in saddr, caddr;// 将服务器地址结构体 saddr 的内存初始化为 0memset(&saddr,0,sizeof(saddr));// 设置地址族为 IPv4saddr.sin_family = AF_INET;// 将端口号 6000 从主机字节序转换为网络字节序saddr.sin_port = htons(6000);// 将 IP 地址 "127.0.0.1" 从点分十进制转换为网络字节序saddr.sin_addr.s_addr = inet_addr("127.0.0.1");// 将套接字 sockfd 绑定到指定的地址(saddr)int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));// 检查绑定操作是否成功,若失败(返回 -1)则打印错误信息if( res == -1){printf("bind err\n");}// 进入无限循环,持续接收和响应客户端消息while( 1 ){// 定义字符数组 buff,用于存储接收到的消息,初始化为 0char buff[128] = {0};// 初始化客户端地址结构体 caddr 的长度int len = sizeof(caddr);// 从客户端接收数据,存储到 buff 中,同时获取客户端地址信息int n = recvfrom(sockfd,buff,128,0,(struct sockaddr*)&caddr,&len);// 打印接收到的消息内容printf("buff=%s\n",buff);// 向客户端发送 "ok" 消息sendto(sockfd,"ok",2,0,(struct sockaddr*)&caddr,sizeof(caddr));}// 关闭套接字,释放资源close(sockfd);// 正常退出程序exit(0);
}

int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); 

这行代码的作用是将之前创建的套接字 sockfd 绑定到由 saddr 结构体所表示的网络地址上,并通过返回值 res 来判断绑定操作是否成功。 

bind 函数是用于在网络编程中把一个套接字(socket)和一个特定的地址绑定在一起的系统函数。在 TCP 或 UDP 服务器程序中,通常使用 bind 函数将服务器套接字绑定到一个指定的 IP 地址和端口号上,这样服务器就能在该地址上监听并接收来自客户端的连接请求或数据。

http://www.dtcms.com/a/480470.html

相关文章:

  • 怎么做自己的网站后台教程正规的电商平台有哪些
  • 怎么做网页制作网站模板中国最好网站建设公司排名
  • 常州天宁区做网站公司wordpress博客主机选择
  • 河北住房建设厅网站首页北京想象力网站建设
  • 网站刷单账务处理怎么做微页制作网站模板下载软件
  • 资源网站模板coding搭建WordPress
  • 南京市网站建设公司电脑装wordpress
  • 网站网站建设报价建立自己的网站软件有
  • 建站公司见客户没话说魔客吧wordpress主题安装
  • 萧山建设信用网站网络营销传播的核心内容
  • 如何实现网站开发手机验证码中国做网站
  • 北京网站制作公司如何免费建网站赚钱
  • 百度网盘 做网站图床网站做一排横图
  • 中文域名到期对网站的影响ps做网站首页
  • dede怎么设置wap网站建设商务网站的目的
  • 适合做浏览器主页的网站网站服务器怎么迁移
  • 上海建设工程质监局网站天津市哪里有做网站的
  • 网站开发职业定位o2o移动电子商务平台有哪些
  • 上海做网站品牌公司网站源码本地演示
  • php 网站缓存做广个公司网站权重
  • 想让网站被谷歌收录怎么做新开传奇网站发布站
  • 石家庄住房城乡建设厅网站网站域名已经被绑定
  • 群辉nas 做网站建网站如何添加会员模式
  • 网站的版式设计有哪些宝塔在wordpress安装redis
  • 织梦如何做中英文版的网站企业服务公司起名
  • php网站源码大全易企秀h5制作官网
  • 论坛网站开发开题报告深圳网络推广深圳网
  • 杭州最便宜的网站建设网站建设需要知识
  • 南京中建乡旅建设投资有限公司网站怎样设置网站关键词
  • wordpress网站收录插件手机软件怎么写出来的啊