• socket学习一、socket、bind/connect、listen函数详解


    一、Socket是什么?

    Socket本意是插座,在计算机通信领域中被翻译为“套接字”,是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。通过Socket,两台计算机可以通过网络进行信息的传递。
    头文件:
    详细教程见:socket()函数

    二、socket()函数

    2.1、函数定义

    int socket (int af, int type, int protocol);
    
    • 1

    作用: 用来创建套接字,确定套接字的各种属性,以进行网络通信。

    2.2、参数详解:

    1) int af: 地址族(Address Family),又称协议族,也就是 IP 地址类型,常用的有 AF_INET 和 AF_INET6,分别代表IPv4地址和IPv6地址

    2) int type: 数据传输方式或套接字类型,最常见的有SOCK_STREAM和 SOCK_DGRAM。

    1. SOCK_STREAM:面向连接的数据传输方式,是基于TCP的协议;
    2. SOCK_DGRAM:无连接的数据传输方式,是基于UDP的协议。

    3) int protocol: 传输协议。对应上述的type,常用的有IPPROTO_TCPIPPTOTO_UDP,分别代表TCP和UDP协议。系统会根据aftype的值自行选择protocol,因此该项一般可直接指定为0

    2.3、返回值:

    int 类型的套接字文件描述符。

    2.4、使用方法:

    int serv_sock = socket(AF_INET, SOCK_STREAM, 0);
    
    • 1

    2.5、参考资料:

    1、socket()函数用法详解:创建套接字

    三、bind()函数

    3.1、函数定义

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

    作用: 用于服务端将通信的地址和端口绑定到 socket。只有这样,流经该 ip地址和端口的数据才能交给该socket处理。

    3.2、参数详解:

    1) int sockfd: 用来标识服务端套接字,由socket函数返回的文件描述符。
    2) struct sockaddr *addr: 用来保存服务端套接字信息(包括IP和端口等)
    3) socklen_t *addrlen: 表示addr地址空间大小,与int*类型一样,可由 sizeof() 计算得出。

    3.3、参考资料:

    1、bind()和connect()函数:绑定套接字并建立连接

    四、connect()函数

    4.1、函数定义

    int connect(int sock, struct sockaddr *serv_addr, socklen_t addrlen);
    
    • 1

    作用: 用于客户端使用与服务端建立连接,参数与bind()函数参数完全一致。

    五、listen()函数

    5.1、函数定义

    int listen(int sockfd, int backlog);
    
    • 1

    作用: 把一个未连接的套接字转换成被动套接字,使其可以接受来自其他主动套接字的连接请求,并限制Server程序调用accept函数之前的最大连接数

    5.2、参数详解:

    1) int sockfd: 由socket函数返回,要被listen函数作用的套接字文件描述符。
    2) int backlog: 内核进程在自己的空间里维护的一个跟踪已完成连接但服务器进程还没有接手处理或正在进行的连接的队列的大小。backlog告诉内核使用这个数值作为队列大小的上限。

    5.3、返回值:

    返回:0──成功, -1──失败

    5.4、参考资料:

    1、网络编程socket之listen函数
    2、Socket编程之listen函数

  • 相关阅读:
    SpringBoot如何避免SQL注入漏洞呢?
    国内离线安装 Chrome 扩展程序的方法总结
    【ACWing】3095. 冻结
    【MindSpore易点通】模型测试和验证
    chromium线程模型(2)-线程池实现
    全志H616语言控制刷抖音小项目(守护进程、udev机制)
    element中使用show-summary进行汇总时小数点的问题解决方法
    gradle java: 程序包org.apache.shiro不存在
    C# iText 7 切分PDF,处理PDF页面大小
    使用Apache Flink 和 Apache Hudi 创建低延迟数据湖管道
  • 原文地址:https://blog.csdn.net/qq_33726635/article/details/128019397