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

深圳做外贸网站哪家好搜索热词排行榜

深圳做外贸网站哪家好,搜索热词排行榜,wordpress配置文件ip,网站建设服务费属于什么科目在套接字(Socket)通信中,字节序(Endianness)是指多字节数据在内存或网络传输中的存储顺序。主要有两种字节序: 大端字节序(Big-Endian):最高有效字节(MSB&…

在套接字(Socket)通信中,字节序(Endianness)是指多字节数据在内存或网络传输中的存储顺序。主要有两种字节序:

  1. 大端字节序(Big-Endian):最高有效字节(MSB,Most Significant Byte)存储在低地址,最低有效字节(LSB,Least Significant Byte)存储在高地址。例如:

    int num = 0x12345678;
    

    在大端模式下,内存存储顺序为:

    0x12 0x34 0x56 0x78
    
  2. 小端字节序(Little-Endian):最低有效字节(LSB)存储在低地址,最高有效字节(MSB)存储在高地址。例如:

    0x78 0x56 0x34 0x12
    

套接字通信中的字节序

网络通信通常涉及不同架构的计算机,而不同架构可能使用不同的字节序。为了保证数据的可移植性,网络协议统一采用大端字节序(即网络字节序,Network Byte Order)。这意味着,在发送数据时,需要将数据转换为大端格式;在接收数据时,需要从大端格式转换回主机字节序。

字节序转换函数

在C/C++的Socket编程中,提供了一组字节序转换函数,用于在主机字节序和网络字节序之间进行转换:

  • 主机字节序 → 网络字节序

    • htons():转换16位无符号短整数(short)
    • htonl():转换32位无符号整数(long)
  • 网络字节序 → 主机字节序

    • ntohs():转换16位无符号短整数(short)
    • ntohl():转换32位无符号整数(long)

示例代码

#include <stdio.h>
#include <stdint.h>
#include <arpa/inet.h>int main() {uint16_t host_short = 0x1234;uint32_t host_long = 0x12345678;uint16_t net_short = htons(host_short);uint32_t net_long = htonl(host_long);printf("Host short: 0x%x, Network short: 0x%x\n", host_short, net_short);printf("Host long: 0x%x, Network long: 0x%x\n", host_long, net_long);return 0;
}

运行结果(假设主机是小端字节序):

Host short: 0x1234, Network short: 0x3412
Host long: 0x12345678, Network long: 0x78563412

这样,在网络传输时,所有数据都被转换为大端格式,不同架构的计算机都可以正确解析数据。

无论是客户端还是服务器,发送数据时都应该转换为大端(网络字节序)后再发送,接收数据时再转换回主机字节序。这样可以确保不同架构的计算机都能正确解析数据。

发送数据时:

  1. 先检查主机的字节序(小端或大端)。
  2. 使用 htonl()(32位)或 htons()(16位)将数据转换为 大端字节序
  3. 通过 send()sendto() 发送数据。

接收数据时:

  1. 通过 recv()recvfrom() 接收数据。
  2. 使用 ntohl()(32位)或 ntohs()(16位)将数据从 大端字节序转换回主机字节序
  3. 解析和使用数据。

代码示例:

服务器端(接收整数并转换回主机字节序)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>#define PORT 8080int main() {int server_fd, new_socket;struct sockaddr_in address;int addrlen = sizeof(address);uint32_t net_data, host_data;// 创建 socketserver_fd = socket(AF_INET, SOCK_STREAM, 0);if (server_fd == 0) {perror("Socket failed");exit(EXIT_FAILURE);}// 配置服务器地址address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(PORT);// 绑定 socketif (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {perror("Bind failed");exit(EXIT_FAILURE);}// 监听连接if (listen(server_fd, 3) < 0) {perror("Listen failed");exit(EXIT_FAILURE);}printf("Waiting for connection...\n");new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);if (new_socket < 0) {perror("Accept failed");exit(EXIT_FAILURE);}// 接收数据(网络字节序)recv(new_socket, &net_data, sizeof(net_data), 0);// 转换为主机字节序host_data = ntohl(net_data);printf("Received data (Network Byte Order): 0x%x\n", net_data);printf("Converted to Host Byte Order: %u\n", host_data);close(new_socket);close(server_fd);return 0;
}

客户端(发送整数,转换为大端字节序)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>#define PORT 8080int main() {int sock = 0;struct sockaddr_in serv_addr;uint32_t host_data = 12345;  // 主机字节序uint32_t net_data;// 创建 socketsock = socket(AF_INET, SOCK_STREAM, 0);if (sock < 0) {perror("Socket creation error");return -1;}serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(PORT);// 连接服务器if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {perror("Invalid address/ Address not supported");return -1;}if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {perror("Connection failed");return -1;}// 转换为网络字节序net_data = htonl(host_data);// 发送数据send(sock, &net_data, sizeof(net_data), 0);printf("Sent data (Host Byte Order): %u\n", host_data);printf("Converted to Network Byte Order: 0x%x\n", net_data);close(sock);return 0;
}

运行流程:

  1. 服务器端运行,等待连接:

    Waiting for connection...
    
  2. 客户端连接服务器并发送整数 12345(转换为大端字节序 0x00003039):

    Sent data (Host Byte Order): 12345
    Converted to Network Byte Order: 0x3039
    
  3. 服务器端接收到数据并转换回主机字节序:

    Received data (Network Byte Order): 0x3039
    Converted to Host Byte Order: 12345
    

总结:

  1. 所有数据在发送前都要转换为网络字节序(大端),无论是客户端还是服务器。
  2. 接收数据后,需要转换回主机字节序,保证程序能够正确解析数据。
  3. 使用 htonl()htons() 进行发送转换,ntohl()ntohs() 进行接收转换,确保跨平台兼容性。
http://www.dtcms.com/wzjs/368994.html

相关文章:

  • 绍兴网站seo网站建设公司开发
  • 坑梓网站建设咨询0元入驻的电商平台
  • 通用网站后台管理 asp.net 源码微商怎么引流被别人加
  • 广州网站建设开发设计永久免费客服系统有哪些软件
  • 东莞网站建设lhznkj谷歌商店官网下载
  • 上海网站建设门户描述优化方法
  • 视频号怎么推广流量北京seo优化服务
  • 汕头网站制作哪家好百度官网入口链接
  • 浙江网站建设公司百度搜索量排名
  • 网站备案要网站做才可以使用吗营销策略分析论文
  • 已备案网站新增接入网络营销的优势包括
  • 网站商城制作费用双桥seo排名优化培训
  • 网站建设分录怎么开网络广告策划与制作
  • 去什么网站可以做ctf的题目网站百度不收录
  • 品牌网站建设策seo算法优化
  • 哪个网站代做ppt便宜个人网站推广方法
  • 合肥网站制作需济南seo外包公司
  • 网站开发中怎么联系客服关键词优化app
  • 360排名优化嘉兴seo外包公司费用
  • 做网站 客户大概会有那些问题百度竞价怎么收费
  • 网站备案备注网络营销运营推广
  • 淘宝客没有网站怎么做郑州网络推广排名
  • 毕业设计如何用dw做网站杭州网站优化服务
  • 绍兴高兴区建设网站今日国内热点新闻头条事件
  • 网页设计代码html个人简介湖南关键词优化首选
  • 做网站编辑需要什么文凭石家庄网站建设就找
  • 怎么样让网站正常解析重庆网站优化排名推广
  • 新余专业的企业网站建设公司外贸建站网站推广
  • 成都上市的网站建设公司手机端关键词排名优化软件
  • 网上营销型网站有哪些百度网盘搜索引擎入口在哪