美文网首页
windows 网络编程一

windows 网络编程一

作者: suntwo | 来源:发表于2019-05-04 16:40 被阅读0次

    注解:


    最近我正在学习windows下的网络编程,因此准备记录下自己学习到的知识,以前对网络编程不是很熟悉,因此在学习开始阶段肯定有一些不足,如果有错的地方,还望不要见怪。


    网络编程解释:

    网络编程又称socket编程(套接字编程),网络编程必须明确三个要素即 ip地址,端口号,协议。我来讲解一下每个要素的必要性:

    • ip地址:使用ip地址来确定主机的位置,我们网络上使用公网ip地址来唯一确定一个主机,我们数据包在转发的过程中便是依赖于ip地址来找到主机的位置的,因此ip地址是必不可少的,否则不能到达指定的主机。
    • 端口号:刚才说了ip地址是用来唯一确定网络中的主机,其实我们的网络通信其实是进程之间的通信,因此当主机接收到一个数据包时,我们的网络层需要将数据包交给一个特定的进程,因此我们使用端口号来标识某个特定的进程,比如我们的apache服务器便是使用80端口,当我们的目的端口是80时便会将数据包交给apache服务器的这个进程。
    • 协议:我们通常使用的协议有udp和tcp协议,这是传输层上的两个协议,udp是不可靠的面向数据包的,tcp是可靠的面向字节流的。

    需要使用的结构体讲解:

    我们C语言编程需要定义很多的结构体,因此我将列出一些尝试用的一些结构体来更好的学习网络编程,牢记这些结构体不需要我们自己定义,下面讲解一下这些结构体的组成成分和结构体的需要存储的信息。

    in_addr结构
    struct in_addr{
        union
        {
            struct{u_char s_b1,s_b2,s_b3,s_b4}S_un_b;
            struct{u_short s_w1,s_w2}S_un_w;
            U_long S_addr;
        }
        
    }
    这个结构体的作用便是用来存储ip地址的,首先看到这个结构体里面有一个共用体,共用体里面包含两个结构体和一个变量的定义
    
    作用:
    
    第一个结构体创建了一个S_un_b变量,这个结构体里面包含四个变量,这四个变量各占一个字节,第二个结构体创建一个S_un_w变量,包含两个无符号短整型变量,每个变量都可以存储一个ip地址的低十六位或者高十六位,最后创建了一个无符号长整型变量,可以存储整个ip地址,前两个都是将一个ip地址分开进行存储。因此这个结构体可以有三种存储方法。
    
    sockaddr_in结构
    struct sockaddr_in{
        short sin_family;
        u_short sin_port;
        struct in_addr sin_addr;
        char sin_zero[8];
    }
    
    这个结构体是用来封装ip地址,协议,端口的,第一个字段表示使用的协议簇,tcp/ip使用AF_INET,第二个字段是一个无符号短整型变量,表示端口号,第三个结构体表示ip地址,最后一个字段我们暂时用不到。
    

    地址转换函数:

    点分十进制是我们通常表示ip地址的方法,但在计算机的内部不是用这种方式来表示的,是使用无符号长整形来进行存储的,因此我们可能需要使用一些转换。

    unsigned long inet_addr(const char *cp);
    
    cp表示指向点分十进制的ip地址的字符串
    返回值是无符号长整形数字
    
    这个函数的作用便是表示将一个字符的ip地址转换为一个无符号长整形的数字并且返回,他是一个以一个网络字节顺序表示的32位二进制ip地址。
    
    int inet_aton(const char *p,struct in_addr *inp);
    
    表示将p指向的点分十进制的字符串转换成无符号长整型,并将其存入inp指向的结构体变量中,如果成功返回非0,否则返回0。
    
    char *inet_ntoa(struct in_addr in);
    
    表示将一个存储在in结构体变量中的无符号长整形型ip地址转换成点分十进制的字符串ip地址,并返回这个字符串的地址。如果失败返回一个控制帧NULL。
    

    相关文章

      网友评论

          本文标题:windows 网络编程一

          本文链接:https://www.haomeiwen.com/subject/vcxfoqtx.html