• 网络编程基础


    本文文件夹:

    一:网络地址结构体的介绍

    二:大端序和小端序的简介以及它们转换的函数接接口



    一:网络地址结构体的介绍

    Linux中的网络编程通过Socket(套接字)接口实现,Socket是一种特殊的文件描写叙述符。

    套接字socket有三种类型:
    • 流式套接字(SOCK_STREAM):流式的套接字能够提供可靠的、面向连接的通讯流。它使用了TCP协议。TCP保证了传输数据的正确性和顺序性。


    • 数据报套接字(SOCK_DGRAM):数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,而且不保证可靠,无差错,它使用数据报协议UDP。


    •原始套接字(SOCK_RAM):原始套接字同意对低层协议如IP或ICMP直接訪问,主要用于新的网络协议的測试等。


    网络地址结构体:

    struct sockaddr
    {
    u_short sa_family;    //Sa_family:地址族。採用“AF_xxx”的形式,如:AF_INET。
    char sa_data[14];      //Sa_data:14字节的特定协议地址。
    }


    struct sockaddr_in
    {
    short int sin_family; /* Internet地址族*/
    unsigned short int sin_port; /* 端口号*/
    struct in_addr sin_addr; /* IP地址*/
    unsigned char sin_zero[8]; /* 填0 */
    }

    struct in_addr
    {
    unsigned long s_addr;
    }
    S_addr: 32位的地址。


    编程中一般并不直接针对sockaddr数据结构操作,而是使用与sockaddr等价的sockaddr_in数据结构。


    二:大端序和小端序的简介以及它们转换的函数接接口

    IP地址通常由数字加点(192.168.0.1)的形式表示。而在struct in_addr中使用的是IP地址是由32位的整数表示
    的。为了转换我们能够使用以下两个函数:

             int inet_aton(const char *cp,struct in_addr *inp)
             char *inet_ntoa(struct in_addr in)
    函数里面a 代表ascii n代表network.第一个函数表示将a.b.c.d形式的IP转换为32位的IP,存储在inp指针里面。第二个是将32位IP转换为a.b.c.d的格式。


    网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与详细的CPU类型、操作系统等无关。从而可以保证数据在不同主机之间传输时可以被正确解释。网络字节顺序採用big endian排序方式。

    传输时可以被正确解释。网络字节顺序採用big endian排序方式。


                                                      32bit的整数(0x01234567)从地址0x100開始:

    小端字节序:



    大端字节序:


    字节序转换
    htons把unsigned short类型从主机序转换到网络序;
    vhtonl把unsigned long类型从主机序转换到网络序。
    vntohs把unsigned short类型从网络序转换到主机序;
    vntohl把unsigned long类型从网络序转换到主机序;


    注意:在实验编码中,有非常多的与地址相关的函数,如htons(),thonl(),inet_addr()等。是我们进行网络编程必须掌握的相关知识,当中htonl用于将本机上的long型数据转换为网络上的long型数据,htons()转化为的对象时short型的,inet_addr()能够将字符串表示的ip地址转化为整形的ip地址。









  • 相关阅读:
    论文笔记:SAIN: Self-Attentive Integration Network for Recommendation(SIGIR 2019)
    论文笔记:Neural Graph Collaborative Filtering(SIGIR 2019)
    已过的时间,未来的征程
    关于博客
    论文阅读:OpenFlow: Enabling Innovation in Campus Networks
    论文阅读:ClickNF: a Modular Stack for Custom Network Functions
    论文阅读:Forwarding Metamorphosis: Fast Programmable Match-Action Processing in Hardware for SDN
    论文阅读:Camdoop: Exploiting In-network Aggregation for Big Data Applications
    Hedera: Dynamic Flow Scheduling for Data Center Networks
    论文阅读:NETFPGA SUME: TOWARD 100 GBPS AS RESEARCH COMMODITY
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6913162.html
Copyright © 2020-2023  润新知