socket学习一、socket、bind/connect、listen函数详解
创始人
2024-02-19 22:38:21
0

一、Socket是什么?

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

二、socket()函数

2.1、函数定义

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

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

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);

2.5、参考资料:

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

三、bind()函数

3.1、函数定义

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

作用: 用于服务端将通信的地址和端口绑定到 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);

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

五、listen()函数

5.1、函数定义

int listen(int sockfd, int backlog);

作用: 把一个未连接的套接字转换成被动套接字,使其可以接受来自其他主动套接字的连接请求,并限制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函数

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
带头循环双向链表来咯!!! 前言:继上文,我们了解了结构最简单的一种链表---单链表那么我们今天就来...