最后更新:2021-12-24 06:42:06 手机定位技术交流文章
IP地址和端口号
1,IP地址用于将计算机与网络连接起来,并接收和提供数据。必须给他们分配IP地址。IP地址分类为 IPv4 (4个字节地址家庭) 或 IPv6 (16个字节地址家庭)。主要区别是用于代表IP地址的字节数。针对IPv4地址到期,提出了IPv6。IPv4目前是最常用的协议 。将网址和主机地址合并到IPv4标准4字节IP地址。并细分为A、B、C、D、E等。
这一数据传输程序如下:数据传送到IP地址(即网络路由器或开关),然后由收到数据中基于主机地址的数据的路由器将数据传送到目标主机。
为了与外联网交换数据,需要本地计算机。作为中间体,需要一种物理装置来翻译数据。这种设备就是路由器,有时称为总机。事实上,它们是一台电脑。它只是为了某些目的而运行的所以,如果我们在个人电脑上安装适当的软件也可以作为总机使用。另外,开关函数比路由器函数复杂得多 。而实际用途差不多。
2 网络地址分类和主机地址边界:从互联网地址占用的字节数量只能根据IP地址最初的字节以两种方式确定:
一:
A类的第一个字节范围是0-127。
第一字节 B 区域范围: 128-191
C类:192-223
…
二:
A类地址从零开始。
B类的前两个地址从十个开始
头三个C级演讲从110开始。
…
3,端口号:用于区分机器的 IP 地址 。如果您有 IP 地址, 您可以将数据发送到目标主机 。但是,这不允许将数据转移到最后申请。因此,该端口用于确定应联系哪个程序。端口号由16位元组成。所分配的港口范围为0-65535。另一方面, 0-1023号申请被指定用于某些申请。另外,尽管港口号不能重复(即港口号不能同时给予不止一种套接字应用程序)。尽管如此,这仍可归因于其他种类的调整应用。因为没有港口号码,所以他们不透露港口号码如果将9190指定给 tcp,tcp 软件包将不再可用端口号 。但是,联合民主党的一揽子计划是可以获得的。
地址信息的表示
根据前文,地址信息应当有地址家庭+IP地址+端口号,以下是方案内对其结构的描述:
//标准结构体
struct sockaddr
{
sa_ family_t sin_ family;// 家庭地址
Char sa_ data [14];/ IP 地址和端口号
}
1
2
3
4
5
6
7
//扩展结构体
struct sockaddr_in
{
sa_ family_t sin_family;/家庭住址
sin_port = int16_t; / 端口号
_addr sin_addr; // Internet 协议地址中的 sruct
字符 sin_sero[8]; / 未定义
}
struct in_addr
{
_addr_t s_addr; 中的 IPv4 位址 //4 比特 IPv4 ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
请记住,方法捆绑()或连接()的第二个参数需要插入袜子结构类型数据。尽管如此,如上所述,很难在这一结构中初始化数据。因此,索卡迪尔结构的扩展部分有一个索卡迪尔的延伸部分。Sockaddr不只是IPv4地址而已因此,这是对地址家庭的人工指定。其扩展 Sockaddr_in 是专门为 IPv4 创建的。然而,它必须确定住址家庭(即使已经知道)。还需要填充阵列。只是为了让袜子结构保持恒定
网络字节序
1,不同的CPU,在记忆中保存数据的方式也可能不同。它分为两类:大尾序列和小尾序列。大型的订单需要大量的地址预存前。最初保存的小地址被称为小顺序。英特尔和AMD系列等CPU使用小端序列标准。例如, 0x12345678大端下方的传输订单是 0x12345678。另一方面,传送令是0x78563412。现在让我们看看我们可以看到什么。如果CPU对服务的规格和客户意见不一致,因此,所转让的数据前后不一致。为了解决这个问题,我们决定了一项统一战略:一个大秩序。这被称为网络字节序列。
注释 : 我们只需在将数据填充为 shockaddr_ in 结构变量时处理字节序列; 不需要额外的网络数据传输, 而系统会自动转换我们 。
2. 转换字节的接口:
/ 将数据类型从主机字节转换为网络字节顺序。
unsigned short ntohs(unsigned short);
unsigned long htonl(unsigned long);
unsigned long ntohl(unsigned long);
注: h 表示主机字节顺序, n 表示网络字节顺序, s 表示短, I 表示长。
网络处理启动和传播问题
1 既然网上地址的基本原则已经确定,实际代码中应该做些什么?在实施之前,必须回答另外几个概念问题:
in_addr_t inet_addr(const chat *string);
当执行网络字节序列时,小数位IP地址()中的点将被转换为32个整数 IP地址。
Windows int inet_aton( 成本字符串, 规则在_ addr* addr);
这个和上面那个一样但是,它还有一个额外的参数。同时,您也可以在 _addr-type 变量中保存已转换的 IP 地址。这是首次使用因特网网址。您可以保存您的手, 并单独提供给 Cerv_ addr 。 我不确定您的意思, sin_ addr. s_ addr 赋予此步骤的价值 。
char * inet_ntoa(struct in_addr adr);
这是将32位整数数据 IP 转换为点段字符串 IP, 而不是以上函数 。
INDD_ANY: 此常数获取运行服务用户的IP地址, 无需手动输入。 通常在服务结束时使用, 服务结束时一般不使用 。
返回地址是返回地址,与计算机自己的 IP 地址相关。 此 IP 地址可以与服务器和客户端一起使用。 否则, 客户端将写入服务器的计算机地址 。
2,代码实现:
在服务端分配网络地址(收到连接)
struct sockaddr_in serv_addr;
...
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(9190);
if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1)
error_handling("bind() error");
...
1
2
3
4
5
6
7
8
9
10
向客户提供IP地址。
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(9190);
if(connect(sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1)
error_handling("connect() error");
...
1
2
3
4
5
6
7
8
9
评论意见:网络地址信息的初始化主要在服务提供商进行;客户即将与服务提供商连接,因此相关服务提供商填写客户IP地址和端口号。
————————————————
夜影是持发委的原始博客CSDN坚持CC-4. 0 BY-SA版权协议,
本文是2011年叙利亚抗争特别报导的一部分。
本文由 在线网速测试 整理编辑,转载请注明出处。