socket()
int socket(int family, int type, int protocol); //创建套接字
- 功能介绍:在Linux系统中,一切皆文件。为了表示和区分已经打开的文件,UNIX/Linux会给文件分配一个ID,这个ID就是一个整数,被称为文件描述符。因此,网络连接也是一个文件,它也有文件描述符。通过socket()函数来创建一个网络连接或者说打开一个网络文件,socket()函数的返回值就是文件描述符,通过这个文件描述符我们就可以使用普通的文件操作来传输数据了。
- 参数介绍:
family
代表协议族,在socket中只能是AF_INET
。type
代表协议类型常见类型是SOCK_STREAM
(TCP),SOCK_DGRAM
(UCP)protocol
代表具体的协议,对于标准套接字来说,其值是0。(原始套接字基本不会使用)
bind()
int connect(int sock_fd, struct sockaddr *serv_addr, int addrlen);//客户端请求连接函数
- 功能介绍:客户端向服务端发起连接请求,当返回值是0时代表连接成功,返回值为-1时代表连接失败。
- 参数介绍:
sock_fd
:代表通过socket()
函数返回的文件描述符,文件句柄serv_addr
: 代表目标服务器的协议族,网络地址以及端口号。是一个sockaddr
类型的指针。addrlen
:代表serv_addr
参数内容的大小
listen()
int listen(int sockfd, int backlog);//监听函数
-
函数功能:listen函数的功能并不是等待一个新的connect的到来,真正等待connect的是accept函数。listen的操作就是当有较多的client发起connect时,server端不能及时的处理已经建立的连接,这时就会将connect连接放在等待队列中缓存起来。这个等待队列的长度由listen中的backlog参数来设定。当listen运行成功时,返回0;运行失败时,返回值为-1.
-
参数说明:
sockfd
:是前面socket
创建的文件描述符;backlog
:是指server
端可以缓存连接的最大个数,也就是等待队列的长度。
accept()
int accept(int sockfd, struct sockaddr *client_addr, socklen_t *addrlen);
- 函数功能:accept函数等待客户端的连接,如果没有客户端连上来,它就一直等待,这种方式称为阻塞。accept等待到客户端的连接后,创建一个新的socket,函数返回值就是这个新的socket,服务端用于这个新的socket和客户端进行报文的收发。
- 参数介绍:
sockfd
是已经被listen
过的socket
。client_addr
:用于存放客户端的地址信息,其中包含客户端的协议族,网络地址以及端口号。如果不需要客户端的地址,可以填0。addrlen
:用于存放参数client_addr
的长度
conect()
int connect(int sock_fd, struct sockaddr *serv_addr, int addrlen);//客户端请求连接函数
- 函数功能:客户端向服务端发起连接请求,当返回值是0时代表连接成功,返回值为-1时代表连接失败。
- 参数介绍:
sock_fd
代表通过socket()
函数返回的文件描述符。serv_addr
:代表目标服务器的协议族,网络地址以及端口号。是一个sockaddr
类型的指针。addrlen
:代表第二个参数内容的大小。
send()
int send(int sockfd, const void *buf,int len, int flags)
- 函数功能:send函数用于把数据通过socket发送给对端。不论是客户端还是服务端,应用程序都用send函数来向TCP连接的另一端发送数据。客户端通过该函数向服务器应用程序发送数据。函数返回已发送的字节数。出错时返回-1
- 参数介绍:
sockfd
代表 发送端的套接字描述符,即通过socket
()函数返回的文件描述符。buf
指明需要发送数据的内存地址,可以是C语言基本数据类型变量的地址,也可以是数组、结构体、字符串。len
指明实际发送数据的字节数。flags
一般设置为0,其他数值意义不大。
recv()
int send(int sockfd, const void *buf, int len, int flags)
- 函数功能:recv函数用于接收对端socket发送过来的数据。不论是客户端还是服务端,应用程序都用recv函数接受来自TCP连接的另一端发送过来的数据。如果socket对端没有发送数据,recv函数就会等待,如果对端发送了数据,函数返回接收到的字符数。出错时返回-1。如果socket被对端关闭,返回值为0。
- 参数介绍:
sockfd
代表接收端的套接字描述符,即通过socket
()函数返回的文件描述符。buf
为用于接收数据的内存地址,可以是C语言基本数据类型变量的地址,也可以是数组、结构体、字符串。只要是一块内存就行了。len
指明需要接收数据的字节数。不能超过buf
的大小,否则内存溢出。flags
一般设置为0,其他数值意义不大。
整理了一下笔记,参考原文:https://blog.csdn.net/ZH0314/article/details/77387162