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

一、Socket是什么?

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值