zoukankan      html  css  js  c++  java
  • 认识socket

    socket

    socket也称套接字,网络编程的基础。一般情况下我不喜欢直接去说socket的函数都是怎么用的,那个很多人都写出来了,而且肯定比我好的有的是。

    但是今天想写的是我的理解中,产生socket的原因,我觉得只有了解socket的本质、机理,才能更灵活的使用他的API。那样就会知道为什么要那样用,会产生怎样的效果。

    给我的感觉是socket就是一个接口,起着承上启下的作用。它是应用层与传输层的中间产物。

    为什么要这样说?

    首先对应用层来说,不管使用怎样的传输协议只要能达到想要的传输结果就可以了,它不管你使用了怎样的传输的方式,只要看到结果就

    但是对传输层来说,要根据不同的需求使用不同的协议(TCP,UDP 等)去传输信息。具体结构如下图所示:

     

     

     

    socket函数创建socket:

    #include<sys/types.h>

    #include<sys/socket.h>

    int socket(int domain, int type, int protocol);

    函数通过domain判别通信协议,通信协议有:

    协议名称

    含义

    PF_UNIX,PF_LOCAL

    本地通信

    AF_INET,PF_INET

    IPv4 Internet协议

    PF_INET6

    IPv6 Internet协议

    PF_IPX

    IPX-Novell协议

    PF_NETLINK

    内核用户界面设备

    PF_X25

    ITU-T X25 / ISO-8208协议

    PF_AX25

    Amateur radio AX.25

    PF_ATMPVC

    原始ATM PVC访问

    PF_APPLETALK

    Appletalk

    PF_PACKET

    底层包访问

    函数通过type来判别传输协议常见的有,流式套接字、数据报套接字、原始套接字等;

    名称

    含义

    SOCK_STREAM

    TCP传输方式,可靠传输,需要连接

    SOCK_DGRAM

    UDP传输方式不需要连接

    SOCK_SEQPACKET

    序列化包,提供一个序列化的、可靠的、双向的基本连接的数据传输通道,数据长度定常。每次调用读系统调用时数据需要将全部数据读出

    SOCK_RAW

    RAW类型,提供原始网络协议访问

    SOCK_RDM

    提供可靠的数据报文,不过可能数据会有乱序

    SOCK_PACKET

    一个专用类型

    protocol:确定socket到底支持的哪个协议一般情况下使用TCP或者UDP,可以省略为零,系统会默认设置,但是如果使用原始套接字则需进行具体的设置。

    此函数会返回一个int类型的数据,同时以此数据去寻找所创建的socket(你可能创建的不止一个socket),若返回值为-1则表示创建socket失败,若为一个正值则表示创建成功,由于并不是每次创建都是成功的,因此创建socket时要检测是否创建成功

    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)

        //创建一个使用IPV4,UDP传输的socket

            {

                    perror("socket");

                    exit(EXIT_FAILURE);

            }

    总结一句话,socket就是创建一个确定传输模式的接口。

    此篇博客我有去参考有:

    https://blog.csdn.net/xc_tsao/article/details/44123331

    https://blog.csdn.net/liuxingen/article/details/44995467

    https://blog.csdn.net/qq_33573235/article/details/79292679

    大雄技术有限,若有错误请指出,共同进步谢谢!

  • 相关阅读:
    11.10 日志
    1120day户别确认
    10.28代码
    hdu 1695 GCD (莫比乌斯反演)
    8月19日
    多态在子父类中的成员上的体现的特点
    JAVA学习日报 10/29
    JAVA学习日报 10/26
    JAVA学习日报 11/2
    JAVA学习日报 10/30
  • 原文地址:https://www.cnblogs.com/XLX-0327/p/10605830.html
Copyright © 2011-2022 走看看