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.通信結束,斷開連接

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM