1. 相关概念
套接字通信最早跟前六种进程间通信方式一样,也只能实现一台主机的多个进程之间通信,由于后期加入了TCP/IP协议族,所以才能实现不同主机的进程间通信
最早的套接字通信称之为本地通信或者UNIX域套接字
创建套接字时使用本地协议PF_UNIX(或PF_LOCAL)。
分为流式套接字和用户数据报套接字
和其他进程间通信方式相比使用方便、效率更高
常用于前后台进程通信
2. 本地信息结构体
使用man 7 unix查询
#include <sys/un.h>
struct sockaddr_un {
sa_family_t sun_family; 地址族AF_UNIX
char sun_path[108]; 文件名,最终会创建一个套接字文件
};
3. TCP本地通信
3.1 流程
服务器:
创建套接字 socket()
填充服务器本地信息结构体 struct sockaddr_un
将套接字与服务器本地信息结构体绑定 bind()
将套接字设置为被动监听套接字 listen()
阻塞等待客户端连接 accept()
进行通信 recv()/send()
客户端:
创建套接字 socket()
填充服务器本地信息结构体 struct sockaddr_un
发送客户端连接请求 connect()
进行通信 recv()/send()
3.2 服务器
//TCP本地通信之服务器
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/un.h>
#define N 128
//__FILE__: 获取文件名
//__func__:获取函数名
//__LINE__