Socket是什么及常见的Socket函数

本文详细介绍了Socket在网络通信中的作用,包括socket()、bind()、listen()、connect()、accept()等常见函数的功能、参数和用法,以及read()和close()等I/O操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Socket 是什么?

Socket 是用于网络进程(使用TCP/IP协议的进程)之间的通信的。它起源于Unix,可以说它是一个特殊的文件(与进程一一对应)。可以用“打开--->读写--->关闭”模式来操作,Socket函数便是用来执行操作的。

二、常见的Socket函数

A.socket()函数

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

功能:该函数对应普通文件的打开操作。它会返回一个socket描述符,描述符唯一标识一个socket。

参数:domain:协议族,决定socket的地址类型,通信中必须采用对应的地址。

type:socket类型。

protocol:指定协议。

返回值:socket 描述符。

注意:当我们用socket()返回一个描述字,该描述字存在于协议族空间,但没有一个具体的地址。

B.bind()函数

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

功能:将地址族的一个特定地址赋给socket。

参数:sockfd:socket()返回的描述字。

addr:指向赋给 sockfd 的协议地址。

addrlen:地址的长度。

返回值:0表示成功,-1表示不成功。

注意:服务器在启动时都会绑定一个众所周知的地址(如ip地址 + 端口号),用于提供服务。而客户端不需要指定,仅仅在connect()(与服务器建立连接)时由系统随机生成即可。

!!!在将一个地址绑定到socket的时候,先将主机字节序列转换为网络字节序

C.listen()函数、connect()函数

int listen(int sockfd,int backlog);

功能:服务器调用socket() ,bind() 后调用 listen() 来监听socket,当客户端此时调用connect()发出连接请求,服务器端会接收到这个请求。

参数:sockfd:服务器监听的socket 描述字。

backlog:socket可以排队的最大连接个数。

返回值:无错误返回0,有错误返回-1。

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

功能:与服务器建立连接

参数:sockfd:客户端的socket 描述字。

返回值:成功返回0;否则返回Socket_error 错误。

addr:服务器的socket 地址。

addrlen:服务器地址的长度。

D.accept()函数

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

功能:服务器接收到客户端的connect请求后,调用accept函数接收请求。

参数:sockfd:服务器的socket 描述字。

返回值:成功返回非负值,失败返回-1。

addr:服务器的socket 地址。

addrlen:服务器地址的长度。

E.read()函数、close()函数

网络I/O操作有多组,可自行查略。

read() / write()

readv() / writev() 

....

F.close()函数

完成读写操作后关闭响应的socket 描述字。

注意:该操作只是使相应的socket 描述字引用计数-1(多线程应用),当计数为0时,才会关闭socket 描述字。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值