TCP/Socket
-
socket():
-
功能: 创建一个新的套接字。
-
参数:
-
domain
: 指定通信域,如AF_INET
(IPv4)或AF_INET6
(IPv6)。 -
type
: 指定套接字类型,如SOCK_STREAM
(TCP)或SOCK_DGRAM
(UDP)。 -
protocol
: 通常为0,表示使用默认协议。
-
-
-
bind():
-
功能: 将套接字绑定到一个本地地址和端口。
-
参数:
-
sockfd
: 套接字描述符。 -
addr
: 指向要绑定的地址结构体的指针,通常是sockaddr_in
或sockaddr_in6
。 -
addrlen
: 地址结构体的长度。
-
-
-
listen():
-
功能: 将套接字设置为监听模式,等待连接请求。
-
参数:
-
sockfd
: 套接字描述符。 -
backlog
: 等待连接队列的最大长度。
-
-
-
accept():
-
功能: 接受一个连接请求,创建一个新的套接字用于与客户端通信。
-
参数:
-
sockfd
: 监听套接字描述符。 -
addr
: 指向客户端地址结构体的指针。 -
addrlen
: 客户端地址结构体的长度。
-
-
-
connect():
-
功能: 客户端使用该函数连接到服务器。
-
参数:
-
sockfd
: 套接字描述符。 -
addr
: 指向服务器地址结构体的指针。 -
addrlen
: 服务器地址结构体的长度。
-
-
-
send():
-
功能: 发送数据到已连接的套接字。
-
参数:
-
sockfd
: 套接字描述符。 -
buf
: 指向要发送数据的缓冲区。 -
len
: 要发送的数据长度。 -
flags
: 发送标志,通常为0。
-
-
-
recv():
-
功能: 从已连接的套接字接收数据。
-
参数:
-
sockfd
: 套接字描述符。 -
buf
: 指向接收数据的缓冲区。 -
len
: 缓冲区的长度。 -
flags
: 接收标志,通常为0。
-
-
-
close():
-
功能: 关闭套接字,释放资源。
-
参数:
-
sockfd
: 套接字描述符。
-
-
-
shutdown():
-
功能: 关闭套接字的读、写或读写功能。
-
参数:
-
sockfd
: 套接字描述符。 -
how
: 关闭方式,如SHUT_RD
(关闭读)、SHUT_WR
(关闭写)或SHUT_RDWR
(关闭读写)
-
-
以上是tcp的常用接口,接下来讲讲细节:
和udp类似,我们需要先使用socket来创建一个文件,
和udp不同的是,tcp是面向连接的,就要求tcp随时等待被链接,需要讲socket设置为监听状态:
我们用accept接收客户端信息的时候,需要重新定义一个文件描述符,之后我们拿着新的文件描述符直接去通讯,之前的描述符就继续去监听其他新的客户端信息,当我们使用完的时候一定要记得释放文件描述符,要不然会造成文件描述符泄露。、
我们可以使用read,write的方式来通讯,也可以使用recv和send的方式: