ip地址转换(字符串ip-整数,主机网络字节序)

ipconfig

点分十进制字符串和用网络字节序整数表示的IPV4地址的转换

#include <arpa/inet.h>
    // p:点分十进制的IP字符串,n:表示network,网络字节序的整数
    int inet_pton(int af, const char *src, void *dst);
        af:地址族: AF_INET  AF_INET6
        src:需要转换的点分十进制的IP字符串
        dst:转换后的结果保存在这个里面

    // 将网络字节序的整数,转换成点分十进制的IP地址字符串
    const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
        af:地址族: AF_INET  AF_INET6
        src: 要转换的ip的整数的地址
        dst: 转换成IP地址字符串保存的地方
        size:第三个参数的大小(数组的大小)
        返回值:返回转换后的数据的地址(字符串),和 dst 是一样的

*/

#include <stdio.h>
#include <arpa/inet.h>

int main() {

    // 创建一个ip字符串,点分十进制的IP地址字符串
    char buf[] = "192.168.1.4";
    unsigned int num = 0;

    // 将点分十进制的IP字符串转换成网络字节序的整数
    inet_pton(AF_INET, buf, &num);
    unsigned char * p = (unsigned char *)&num;
    printf("%d %d %d %d\n", *p, *(p+1), *(p+2), *(p+3));


    // 将网络字节序的IP整数转换成点分十进制的IP字符串
    char ip[16] = "";
    const char * str =  inet_ntop(AF_INET, &num, ip, 16);
    printf("str : %s\n", str);
    printf("ip : %s\n", str);
    printf("%d\n", ip == str);

    return 0;
}

TCP通信流程

TCP-UDP传输层的协议

UDP:用户数据报,面向无连接,可以单播,多播、广播,面向数据报,不可靠,对于实时性要求高的情况下,用UDP,效率高

TCP:传输控制协议,面向连接的,可靠的,基于字节流,仅支持单播传输(点对点)

通信流程

服务器(被动接受连接)

1.创建一个用于监听的套接字

         -监听:监听有客户端的连接

         -套接字:就是一个文件描述符,

2.将这个监听的文件描述符和本地的IP和端口绑定

    -客户端链接服务器的时候使用的就是这个IP和端口

3.设置监听,监听的fd开始工作

4.阻塞等待,等待客户端连接。当有客户端发起连接,解除阻塞。会得到一个和客户端通信的套接字(fd)

5.通信、

6.通信结束 -断开连接

客户端

1.创建一个用于通信的套接字(fd)

2.连接服务器,需要指定连接服务器的ip和端口

3.连接成功,客户端可以直接和服务器通信

   -接受数据

   -发送数据

4.通信结束,断开连接

 

 

posted @ 2021-09-11 18:25  wsq1219  阅读(1254)  评论(0编辑  收藏  举报