做百度网站每年的费用,自己做了一个网站,央企 网站建设 公司,做英剧网站的目的UNIX套接字通信的优势#xff1a; UNIX套接字通信常用于一个项目中的进程之间通信#xff0c;UNIX提供了与网络套接字相似的特性#xff0c;但是避免了网络延迟#xff0c;提高了性能#xff0c;但是它只能在同一台机器上使用#xff0c;无法跨越网络的进程间通信
实例 UNIX套接字通信常用于一个项目中的进程之间通信UNIX提供了与网络套接字相似的特性但是避免了网络延迟提高了性能但是它只能在同一台机器上使用无法跨越网络的进程间通信
实例
服务端代码
// server.c
#include stdio.h
#include stdlib.h
#include string.h
#include sys/socket.h
#include sys/un.h
#include unistd.h#define SOCKET_PATH /tmp/my_socketint main() {struct sockaddr_un addr;int fd,cl,rc;char buffer[100];// 创建UNIX域流套接字if ((fd socket(AF_UNIX, SOCK_STREAM, 0)) -1) {perror(socket error);exit(EXIT_FAILURE);}// 初始化地址结构memset(addr, 0, sizeof(addr));addr.sun_family AF_UNIX;strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1);// 绑定地址unlink(SOCKET_PATH); // 确保之前的套接字文件已删除if (bind(fd, (struct sockaddr *)addr, sizeof(addr)) -1) {perror(bind error);close(fd);exit(EXIT_FAILURE);}// 监听连接if (listen(fd, 5) -1) {perror(listen error);close(fd);exit(EXIT_FAILURE);}// 接受客户端连接if ((cl accept(fd, NULL, NULL)) -1) {perror(accept error);close(fd);exit(EXIT_FAILURE);}// 读取客户端发送的消息rc read(cl, buffer, sizeof(buffer));if (rc 0) {printf(Received message: %s\n, buffer);} else {perror(read error);}// 关闭连接和套接字close(cl);close(fd);unlink(SOCKET_PATH); // 删除套接字文件return 0;
}客户端代码
// client.c
#include stdio.h
#include stdlib.h
#include string.h
#include sys/socket.h
#include sys/un.h
#include unistd.h// 地址要与服务器一致
#define SOCKET_PATH /tmp/my_socketint main(int argc, char* argv[]) {// 判断是否有数据传输 if(argc 2){printf(send message is null\n);return -1;}struct sockaddr_un addr;int fd,rc;char buffer[100];strcpy(buffer, argv[1]); // 创建UNIX域流套接字if ((fd socket(AF_UNIX, SOCK_STREAM, 0)) -1) {perror(socket error);exit(EXIT_FAILURE);}// 初始化地址结构memset(addr, 0, sizeof(addr));addr.sun_family AF_UNIX;strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1);// 连接到服务器if (connect(fd, (struct sockaddr *)addr, sizeof(addr)) -1) {perror(connect error);close(fd);exit(EXIT_FAILURE);}// 发送消息到服务器rc write(fd, buffer, strlen(buffer));if (rc 0) {printf(Sent message to server: %s\n, buffer);} else {perror(write error);}// 关闭套接字close(fd);return 0;
}注意 服务端主要进行套接字的创建、绑定、监听最后阻塞接收客户端的连接请求需要注意的是UNIX套接字路径要明确文件位置文件名可以不存在但是父目录要存在可以指定./路径或者为/tmp的Linux系统临时文件目录sockaddr_un结构体只需指定地址族和路径名就可以用客户端主要与服务端进行连接创建套接字设置连接条件尝试连接即可
运行效果
# 终端1
./server
receive msg is: 你好# 终端2
./client 你好
sent msg to server is: 你好