socket编程接口函数简单介绍

来源:互联网 发布:淘宝大衣比较好的店 编辑:程序博客网 时间:2024/06/05 04:39

    本章知识点主要来自朱有鹏老师视频课,部分自己添加总结【重要的不是记函数,而是思路】

    对于函数的使用,经常查 man手册,对于这些函数,重要的是这些结构体

    建立连接

    1. socket 

    socket函数类似于open,用来打开一个网络连接,如果成功则返回一个网络文件描述符(int类型),之

    后我们操作这个网络连接都通过这个网络文件描述符。

    通俗的来说就是开启一个监视描述符。

    int socket(int domain, int type, int protocol);    //protocol  协定

    // socket - create an endpoint for communication 创建通信端点

     

    1. bind

    将一本地地址与一套接口捆绑,给套接字赋予生命。

    int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

    // bind - bind a name to a socket  将名称绑定到套接字

    connect()listen()调用前使用。当用socket()创建套接口后,它便存在于一个名字空间(地址族)中,但并未赋名。bind()函数通过给一个未命名套接口分配一个本地名字来为套接口建立本地捆绑(主机地址/端口号)。

    1. listen【服务器】

    监听

    int listen(int sockfd, int backlog);

    1. connect【客户端】

    连接

    int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

    // connect - initiate a connection on a socket

    发送和接收

    1. sendwrite

    ssize_t send(int sockfd, const void *buf, size_t len, int flags);

    1. recvread

    ssize_t recv(int sockfd, void *buf, size_t len, int flags);

    辅助性函数【ip地址点分十进制与二级制的转换】

    1. inet_atoninet_addrinet_ntoa【不支持IPV6
    2. inet_ntopinet_pton【支持IPV6

     

    表示IP地址相关数据结构【都定义在 netinet/in.h

    1. struct sockaddr
      1. 这个结构体是网络编程接口中用来表示一个IP地址的
      2. 注意这个IP地址是不区分IPv4和IPv6的(或者说是兼容IPv4和IPv6的)
    1. typedef uint32_t in_addr_t;                网络内部用来表示IP地址的类型
    1. struct in_addr

     {

    in_addr_t s_addr;

    };

    1. /* Structure describing an Internet socket address.  */

    struct sockaddr_in

      {

        __SOCKADDR_COMMON (sin_);

        in_port_t sin_port;                 /* Port number.  */

        struct in_addr sin_addr;            /* Internet address.  */

     

        /* Pad to size of `struct sockaddr'.  */

        unsigned char sin_zero[sizeof (struct sockaddr) -

                               __SOCKADDR_COMMON_SIZE -

                               sizeof (in_port_t) -

                               sizeof (struct in_addr)];

      };

    1. struct sockaddr       

    这个结构体是linux的网络编程接口中用来表示IP地址的标准结构体

    bind、connect等函数中都需要这个结构体,这个结构体是兼容IPV4和IPV6的。在实际编程中这个结构体会被一个struct sockaddr_in或者一个struct sockaddr_in6所填充

原创粉丝点击