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

大连网站制作美工百度下载安装

大连网站制作美工,百度下载安装,模型网站,wordpress api文档目录 1--IP地址和端口号 2--地址信息的表示 3--网络字节序与地址变换 4--网络地址的初始化与分配 5--Windows部分代码案例 1--IP地址和端口号 IP 地址分为两类: ① IPv4 表示 4 字节地址族; ② IPv6 表示 16 字节地址族; IPv4 标准的 4 …

目录

1--IP地址和端口号

2--地址信息的表示

3--网络字节序与地址变换

4--网络地址的初始化与分配

5--Windows部分代码案例


1--IP地址和端口号

IP 地址分为两类:

        ① IPv4 表示 字节地址族;

        ② IPv6 表示 16 字节地址族;

IPv4 标准的 4 字节 IP 地址分为网络地址主机地址,一般分为 A、B、C、D和 E 类型:

        ① A类:网络ID(1字节),主机ID(3字节);首字节范围:0~127;

        ② B类:网络ID(2字节),主机ID(2字节);首字节范围:128~191;

        ③ C类:网络ID(3字节),主机ID(1字节);首字节范围:192~223;

        ④ D类:网络ID(4字节));

        ⑤ E类:已被预约;

端口号:

        端口号用于区分 Socket(不同的应用程序),不能将 1 个端口号分配给不同的 Socket;

        端口号由 16 位构成,可分配的端口号范围是 0-65535,其中 0-1023 是知名端口用于分配给特定的应用程序;

        TCP Socket 和 UDP Socket 不会共用端口号,因此允许重复;

2--地址信息的表示

表示 IPv4 地址的结构体 sockaddr_in

struct sockaddr_in{sa_family_t sin_family; // 地址族uint16_t sin_port; // 16位 TCP/UDP 端口号struct in_addr sin_addr; // 32位IP地址char sin_zero[8]; // 不使用
}

成员 sin_family,表示地址族,常用的地址族如下:

        ① AF_INET 表示 IPv4 网络协议中使用的地址族;

        ② AF_INET6 表示 IPv6 网络协议中使用的地址族;

        ③ AF_LOCAL 表示本地通信中采用的 UNIX 的地址族

// 一般用法:
SOCKADDR_IN servAddr;
servAddr.sin_family = AF_INET;

        bind() 函数第二个参数期望获得 sockaddr 结构体类型,其定义如下:

struct sockaddr{sa_family_t sin_family; // 地址族char sa_data[14]; // 地址信息(包含IP地址和端口号,其它部分填充为0)
}

        一般需要将 sockadd_in 结构体强制转换为 sockaddr 结构体变量,将输入到 bind() 函数中:

        bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)); 其中 serv_addr 是sockadd_in结构体变量;

3--网络字节序与地址变换

CPU向内存保存数据的方式有两种:

        ① 大端序:高位字节存放到低位地址;

        ② 小端序:高位字节存放到高位地址;

        在通过网络传输数据时,约定采用统一的网络字节序方式,即统一为大端序;先把数据数组转化成网络字节序(大端序),再进行传输,接收方收到数据后将网络字节序解析为符合自己CPU的数据方式;

// 字节序转换:
unsigned short htons(unsigned short); // 主机字节序转换为网络字节序
unsigned short ntohs(unsigned short); // 网络字节序转换为主机字节序
unsigned long htonl(unsigned short); // 主机字节序转换为网络字节序
unsigned long ntohl(unsigned short); // 网络字节序转换为主机字节序

        h 表示主机(host)字节序,n 表示网络(network)字节序;s 表示 short(linux 中 short 类型占用 2 字节),l 表示 long(linux 中 long 类型占用 4 字节);

4--网络地址的初始化与分配

        inet_addr() 函数会将字符串形式的 IP 地址转换为 32 位整数型数据,并在转换类型的同时完成网络字节序的转换

        inet_addr() 函数还可以检测无效的 IP 地址

// inet_addr.c
// gcc inet_addr.c -o inet_addr
// ./inet_addr#include <stdio.h>
#include <arpa/inet.h>int main(int argc, char *argv[]){char *arrd1 = "1.2.3.4"; char *arrd2 = "1.2.3.256";unsigned long conv_addr = inet_addr(arrd1);if(conv_addr == INADDR_NONE){printf("Error occured \n");}else{printf("Network ordered integer addr: %#lx \n", conv_addr);}conv_addr = inet_addr(arrd2);if(conv_addr == INADDR_NONE){printf("Error occured \n");}else{printf("Network ordered integer addr: %#lx \n", conv_addr);}return 0;
}

        inet_aton() 函数的功能与 inet_addr() 相同,但其在调用过程中会将转换后的 IP 地址信息代入到 sockaddr_in 结构体中,因此使用频率更高;

// inet_aton.c
// gcc inet_aton.c -o inet_aton
// ./inet_aton#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>void error_handling(char *message){fputs(message, stderr);fputc('\n', stderr);exit(1);
}int main(int argc, char *argv[]){char *addr = "127.232.124.79";struct sockaddr_in addr_inet;if(!inet_aton(addr, &addr_inet.sin_addr)){error_handling("Conversion error");}else{printf("Network ordered integer addr: %#x \n", addr_inet.sin_addr.s_addr);}return 0;
}

        inet_ntoa() 函数与上述两个函数的功能相反,其将网络字节序整数型 IP 地址转换为字符串形式;

        调用 inet_ntoa() 函数后,需要存储对应的字符串信息,否则下次被调用会被覆盖;

// 网络地址的初始化
struct sockaddr_in addr;
char* serv_ip = "211.217.168.13"; // 声明 IP 地址字符串
char* serv_port = "9190"; // 声明端口号字符串
memset(&addr, 0, sizeof(addr)); // 结构体变量 addr 的所有成员初始化为 0
addr.sin_family = AF_INET; // 指定地址族
addr.sin_addr.s_addr = inet_addr(serv_ip); // 基于字符串的 IP 地址初始化
addr.sin_port = htons(atoi(serv_port)); // 基于字符串的端口号初始化

5--Windows部分代码案例

// gcc endian_conv_win.c -o endian_conv_win -lwsock32
// endian_conv_win#include <stdio.h>
#include <winsock.h>void ErrorHandling(char* message){fputs(message, stderr);fputc('\n', stderr);exit(1);
}int main(int argc, char *argv[]){WSADATA wsaData;unsigned short host_port = 0x1234;unsigned short net_port;unsigned long host_addr = 0x12345678;unsigned long net_addr;if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){ErrorHandling("WSAStartup() error!");}net_port = htons(host_port);net_addr = htonl(host_addr);printf("Host ordered port: %#x \n", host_port);printf("Network ordered port: %#x \n", net_port);printf("Host ordered address: %#lx \n", host_addr);printf("Network ordered address: %#lx \n", net_addr);WSACleanup();return 0;
}

// gcc inet_adrconv_win.c -o inet_adrconv_win -lwsock32
// inet_adrconv_win#include <stdio.h>
#include <string.h>
#include <winsock2.h>void ErrorHandling(char* message){fputs(message, stderr);fputc('\n', stderr);exit(1);
}int main(int argc, char *argv[]){WSADATA wsaData;if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){ErrorHandling("WSAStartup() error!");}// inet_addr 函数调用示例{char *addr = "127.212.124.78";unsigned long conv_addr = inet_addr(addr);if(conv_addr == INADDR_NONE){printf("Error occured! \n");}else{printf("Network ordered integer addr: %xlx \n", conv_addr);}}// inet_ntoa 函数调用示例{struct sockaddr_in addr;char *strPtr;char strArr[20];addr.sin_addr.s_addr = htonl(0x1020304);strPtr = inet_ntoa(addr.sin_addr);strcpy(strArr, strPtr);printf("Dotted-Decimal notation3 %s \n", strArr);}WSACleanup();return 0;}

http://www.fp688.cn/news/156490.html

相关文章:

  • 公司做网站的费用怎么入账百度推广优化排名怎么收费
  • 深圳市住房建设局网站首页电视剧百度搜索风云榜
  • 微信官方网站it教育培训机构
  • 报价网站系统seo关键词排名价格
  • 网站首页文件名通常是上海还能推seo吗
  • 网站外链推广平台网站点击量与排名
  • 怎么做天猫内部券网站企业网站设计思路
  • 做vlogger的网站有哪些宁波网站优化公司哪家好
  • 那里有网站建设seo基础理论
  • 如何让百度口碑收录自己的网站重庆seo海洋qq
  • 五大搜索引擎 三大门户网站百度影音在线电影
  • 泰康人寿保险官方网站成人教育培训机构十大排名
  • 毕业设计除了网站还可以做啥公司seo推广营销网站
  • 狮山做网站seo经典案例
  • 网站站点层叠样式怎么做长春网络推广优化
  • 工程监理行业为什么做网站北京seo网站开发
  • 内蒙古网站制作公司百度知道官网
  • 公司做网站有什么用东莞百度seo排名
  • 网站建设公司源码谷歌google中文登录入口
  • 棋牌类网站是用游戏方式做的吗浙江企业seo推广
  • 网站优化流程图环球网
  • 苏州it外包服务企业seo网站营销推广
  • 泊头哪给做网站的好查数据的网站有哪些
  • 做网站是什么工作seo培训赚钱
  • 北京网站建设课程培训班搜索引擎网站
  • 外贸seo优化搜索引擎seo关键词优化效果
  • 帝国做视频网站宁德市人社局
  • 自己做开奖网站seo外包方法
  • wordpress资源下载类模板竞价关键词优化软件
  • 济宁网站建设优惠信息流优化师培训