1.大小端模式

1. 大端模式:低地址存储高字节
    小端模式:低地址存储低字节

2.网络传输统一使用大端模式作为网络字节序,而计算机大多数为小端模式

3.大小端转化函
(1)头文件     #include <arpa/inet.h>
(2)函数 
        uint32_t htonl(uint32_t hostlong);       //主机字节序转化为网络字节序 long 类型

uint16_t htons(uint16_t hostshort);    //主机字节序转化为网络字节序short类型

uint32_t ntohl(uint32_t netlong);        //网络字节序转化为主机字节序 long 类型

uint16_t ntohs(uint16_t netshort);        //网络字节序转化为主机字节序short类型

2.地址转化函数

一般我们所用的如192.168.10.3这类IP地址是点分式十进制,在网络传输时需要转化为32位无符号整数
点分式10进制转化32位无符号整数函数
 (1)头文件 #include <arpa/inet.h>
 (2)int inet_pton(int af, const char *src, void *dst);
      功能:将一个点分式10进制 IP字串转化为一个 32位无符号整数 
      参数: 
          af  协议族   AF_INET : IPV4      AF_INET6 :IPV6 ...
          src: 表示一个不可以修改的字符串 即点分式十进制数串 
          dst:    是一个地址 这个地址用于存储32位无符号的整数 
     返回值: 成功返回 1  失败返回 -1 错误码填充再 errno中         
     注意:最后出来的存储 内容并不是小端存储 而是 以网络字节序存储

32位无符号整数转化点分式10进制函数   
  (1)头文件 #include <arpa/inet.h>
  (2) const char *inet_ntop(int af, const void *src,  char *dst, socklen_t size);
    功能:将一个32位的无符号整数IP地址 转化位 十进制点分式IP地址 
    参数: 
        af 即协议族,同上
        src 存储32位数据的地址 
        dst 即存储点分式字符串的首地址 
        len     即缓冲区的长度定义的 因为 IPV4 和 IPV6的协议地址长度是不同 
            定义了两个宏 
                #define INET_ADDRSTRLEN 16      缓冲区长度占16个字节 
                #define INET6_ADDRSTRLEN 46 
    返回值:成功返回 存储的首地址   失败返回 NULL

3.存储IP地址端口的结构体

下面两个结构体可存储绑定socket的IP地址和端口号,一般使用第二个

1.struct sockaddr {
                sa_family_t sa_family; //指的是协议族 即你的地址结构体中需要协议族这个内容 
                char        sa_data[14]; //存储地址和端口号等信息的 
            }

2.头文件:#include <netinet/in.h >

struct sockaddr_in {
                sa_family_t sin_family;   //协议族        AF_INET : IPV4      AF_INET6 :IPV6 ...
                in_port_t sin_port;          // 端口号 
                struct in_addr sin_addr;  // IP地址 
            };

struct in_addr{
                u32_i s_addr; //无符号的32位数据 表示 32位的地址 
            }

ps:以上的结构体中存储的数据必须是网络字节序

4.举例

因此,一般绑定socket的地址设定如下

    struct sockaddr_in saddr;memset(&saddr,0,sizeof(saddr));saddr.sin_family = AF_INET;saddr.sin_port = htons(88);//88端口号saddr.sin_addr.s_addr = inet_addr("127.0.0.1");  //127.0.0.1 IP地址

5.端口号

端口号说明

6.INADDR_ANY

我们有时会遇到addrServer.sin_addr.s_addr = htonl(INADDR_ANY)这种定义,那么INADDR_ANY代表什么意思呢?

INADDR_ANY转换过来就是0.0.0.0,泛指本机的意思,也就是表示本机的所有IP,因为有些机子不止一块网卡,多网卡的情况下,这个就表示所有网卡ip地址的意思。

比如一台电脑有3块网卡,分别连接三个网络,那么这台电脑就有3个ip地址了,如果某个应用程序需要监听某个端口,那他要监听哪个网卡地址的端口呢?

如果绑定某个具体的ip地址,你只能监听你所设置的ip地址所在的网卡的端口,其它两块网卡无法监听端口,如果我需要三个网卡都监听,那就需要绑定3个ip,也就等于需要管理3个套接字进行数据交换,这样岂不是很繁琐?

所以出现INADDR_ANY,你只需绑定INADDR_ANY,管理一个套接字就行,不管数据是从哪个网卡过来的,只要是绑定的端口号过来的数据,都可以接收到。

TCP IP地址和端口号设置相关推荐

  1. 关于绑定IP地址与端口号的见解

    "端口",通俗地讲就是一个通信通道的"门",各种计算机服务和通信都是通过特定的端口与外部计算机进行通信,像常见的WWW.FTP.Telnet服务一样. 随着计算 ...

  2. 网络编程-IP地址、端口号、网络字节序

    IP地址.端口号.网络字节序 本文中部分名词可见: 协议.TCP/IP模型.数据包封装与分用 一.IP地址 1. 简单认识 IP协议有两个版本:IPv4和IPv6. (1)IP地址在IP协议中,用来标 ...

  3. odbc找不到服务器ip,[转载]不需ODBC可由IP地址与端口号建立与SQLSERVER的连接

    不需ODBC可由IP地址与端口号建立与SQLSERVER的连接 package jsp; import java.sql.*; // JDBC package public class sql_dat ...

  4. 22.1 网络编程:软件结构、网络通信协议、UDP与TCP协议、(网络编程三要素:协议、ip地址、端口号)、查看ip地址、检测网络是否连通、判断ip是否可用

    目录 网络编程 软件结构 网络通信协议 TCP/IP协议 协议分类 UDP TCP 网络编程三要素 协议 IP地址 列:查看本机ip地址 检查网络是否连通.判断ip是否可用 端口号 网络编程 软件结构 ...

  5. 【网络初识】IP地址,端口号的概念;TCP/IP五层模型;封装和分用

    文章目录 1. 局域网LAN 2. 广域网WAN 3. 网络通信基础 3.1 IP地址 3.2 端口号 4. 认识协议 5. 五元组 6. 协议分层 6.1 OSI七层模型 6.2 TCP/IP五层模 ...

  6. IP地址、端口号、网络字节序

    本文中部分名词可见: 协议.TCP/IP模型.数据包封装与分用 一.IP地址 1. 简单认识 IP协议有两个版本:IPv4和IPv6. (1)IP地址在IP协议中,用来标识网络中不同主机的地址. (2 ...

  7. IP地址和端口号的概念

    所有的联网的程序,都会进行网络通信 计算机只有一个物理网卡,而且同一个局域网中,网卡的地址必须是唯一的 网卡是通过唯一的IP地址来进行定位的 IP地址用来定位计算机 端口号用来具体的应用程序(软件) ...

  8. 路由器和电脑IP地址、端口号、网卡mac查询方式

    1.windows电脑ip查询命令:cmd打开电脑终端,输入ipconfig C:\Users\CI>ipconfig 2.Linux系统查询IP:ifconfig 3.路由器内网IP地址查询: ...

  9. linux修改redis的访问ip不生效,linux系统中 redis 保存数据的5种形式 linux后端模式启动 jedis无法通过IP地址和端口号访问如何修改linux防火墙...

    vim修改redis.conf配置文件(我的已经复制到虚拟机的/usr/local/redis/bin目录下)为daemonize yes, 以后端模式启动 ./redis-server redis. ...

最新文章

  1. ITSM实施三招[案例]
  2. 03-获取 TargetUser 的 Followings 列表
  3. springboot EnableAutoConfiguration
  4. JavaScript 操作 Cookie
  5. mysql不存在就批量新增_mysql批量插入,存在则修改,不存在则插入
  6. win 10 VMware与Hyper-v共存
  7. javascript进行遍历
  8. 应用程序偏好设置(转)
  9. winform 显示控件层级关系
  10. GIMP:图层蒙版应用小例
  11. 【Linux】快速入门法宝~你值得拥有
  12. 【Uplift】评估方法篇
  13. day26_安卓基础之之Android介绍与入门
  14. 图像互信息(MI)的计算(Python版本)
  15. 判断三个数是否能构成三角形_七年级 初一下册数学三角形专题复习提纲及经典例题...
  16. 10 EPC与物联网
  17. matlab功率谱密度单位,功率谱密度单位是什么?和功率有关系吗?
  18. (2019最新)云端批量群控智能管理系统
  19. 水库水位监测 水库监测预警系统方案
  20. 网传深圳一程序员坠楼身亡

热门文章

  1. 《IT项目管理》(郭宁编著) 课后习题答案
  2. linux系统设置密钥登录
  3. “跑分”手机已过时,“双高”手机成新方向
  4. 【CF 513F2】
  5. 开箱即用的高匿代理抓取工具
  6. 新手小白开始学习verilog(学习方法有点歪门邪道的,大佬勿喷( ̄▽ ̄)“)
  7. 结构化数据和非结构化数据有何区别?
  8. 前端:3分钟实现一个共享桌面,还能听见麦克风声音哦
  9. JSON的正确格式及JSON与实体类相互转换
  10. 甘超波:NLP自我价值感