本地套接字
1、基本原理
把网络服务抽象成文件(套接字文件),按照网络通信的格式,进行进程间通信。
2、常用函数
int socket(int domain, int type, int protocol);
-
功能:创建socket对象
- domain:通信方式
AF_UNIX 本地套按字
AF_INET 网络通信
- type:数据的发送方式
SOCK_STREAM 数据流
SOCK_DGRAM 报文
-
protocol:特殊协议,写0即可
-
返回值:
成功返回socket对象描述符
失败返回-1
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
-
功能:把socket对象与socket文件绑定
-
sockfd:socket对象描述符
-
addr:socket文件的地址
-
addrlen:addr 实际类型的字节数
-
struct sockaddr_un
{
sa_family_t sun_family; // 与socket函数的domain参数相同即可
char sun_path[108]; // socket文件的路径
};
int listen(int sockfd, int backlog);
- 功能:开户监听,并设置最大排队数量
- sockfd:socket对象描述符
- backlog:最大排队数量
- 返回值:成功则返回0, 失败返回-1
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
-
功能:等待对方连接
-
sockfd:socket对象描述符
-
addr:用于存储对方的通信地址
-
addrlen:既是输入又是输出,注意。
-
返回值:连接成功的socket描述符,可以用它进行读写数据。
-
read/write/close函数还可以继续使用。
```c
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
```
-
功能:连接到socket对象
-
addr:对方和地址
-
addr:实际类型的字节数
-
编程模型:
进程A 进程B
1、创建socket对象 1、创建socket对象
2、准备地址(文件的路径) 2、准备地址(文件的路径)
3、绑定socket对象和socket文件 …
4、开启监听 …
5、等待连接 3、连接
6、读/写数据 4、写读数据
7、关闭socket对象 5、关闭socket对象