Linux网络编程学习笔记(4)---TCP客户端/服务器模型(C/S模型)

TCP的客户端/服务器模型如下图所示。
Linux网络编程学习笔记(4)---TCP客户端/服务器模型(C/S模型)_第1张图片
上图中,用到的函数介绍如下:

1、 socket()函数

该函数用于创建一个新的套接字。函数原型int socket(int domain,int type,int protocol)

参数介绍:

  1. domain:通信协议族,IPV4为AF_INET或PF_INET
  2. type:指定socket类型,流式套接字(SOCK_STREAM)、数据报式套接字(SOCK_DGRAM)、原始套接字(SOCK_RAW)。
  3. protocol:协议类型,TCP为IPPROTO或0。

函数若创建成功,返回int类型的套接字,失败返回-1。

2、bind()函数

该函数完成本地地址和套接字的绑定。函数原型为int bind(int sockfd,struct sockaddr *addr,socklen_t addrlen);

参数介绍:

  1. sockfd:socket函数返回的套接字
  2. addr:要绑定的地址(通用地址),若已知IPV4地址,需要将其转化成通用地址(利用(struct sockaddr*)进行强制类型转换)
  3. addrlen:地址长度

函数若创建成功,返回0,否则返回-1。

3、listen()函数

该函数用于监听进入的连接。函数原型为:int listen(int sockfd,int backlog);

参数介绍:

  1. sockfd:socket函数返回的套接字;
  2. backlog:规定内核能并发连接的套接字数。在TCP建立连接的三次握手过程中,存在已建立连接和未建立连接两种状态的套接字,分别存放于已完成连接队列和未完成连接队列中。这个变量就是这两个队列长度之和的最大值。

该函数运行成功之后,返回0。并且原来有socket函数创建的套接字sockfd由主动状态—>被动状态,即该套接字能够接收来自其他主动套接字的请求。由此可见,该函数为服务器端独有。

4、accept()函数

该函数返回已完成连接队列中的第一个连接,若已完成连接队列为空,则阻塞,等待客户端的连接请求。函数原型为:int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);

参数介绍:

  1. sockfd:listen函数调用的套接字(服务器的套接字)。
  2. addr:对等方的地址,为网络地址。
  3. addrlen:对等方的地址长度,注意在创建时要有初始值,否则会报错。

函数成功后,返回一个新的套接字(已连接套接字),失败返回0。

5、connect()函数

该函数用于发起一个连接。函数原型为:int connect(int sockfd,struct sockaddr *addr,socklen_t addrlen);

参数介绍:
1. sockfd:未连接套接字,可理解为客户端的套接字;
2. addr:要连接的套接字地址
3. addrlen:要链接的套接字地址长度。

函数成功返回0,失败返回-1,错误信息存放于errno中。

6、read()函数

用于从网络中接收信息,函数原型ssize_t read(int fd,void *buf,size_t count);可理解为“从fd中读取count个字节的数据存入buf中”。

参数介绍:

  1. fd:表示所指向的文件或套接字;
  2. buf:用于存放数据的变量;
  3. count:接收的字节数

函数成功返回0,失败返回-1。

7、write()函数

用于向网络中写信息,函数原型为ssize_t write(int fd,const void *buf,size_t count)可理解为从fd中向bu中写入count个字节的数据。

参数介绍:

  1. fd:表示所指向的文件或套接字;
  2. buf:用于存放数据的变量;
  3. count:发送的字节数

你可能感兴趣的:(socket编程,C++,Linux网络编程学习笔记)