使用c++ 编程 Unix域套接字 .sock为后缀
时间: 2024-11-22 12:35:32 浏览: 6
java基于UNIX域套接字(unix domain socket)连接redis
Unix域套接字是一种轻量级的本地通信机制,它在同一个系统内提供快速、安全的进程间通信,特别适合于在同一台机器上运行的独立服务之间的通信,而不需要经过网络传输。在C++中,我们可以使用POSIX API来操作Unix域套接字,它们通常是".sock"文件形式存在。
以下是一个简单的例子,展示了如何创建、连接和读写的Unix域套接字:
```cpp
#include <sys/socket.h>
#include <unistd.h>
#include <fcntl.h>
#include <cstring>
// 创建套接字
int sock = socket(AF_UNIX, SOCK_STREAM, 0);
// 定义套接字地址
struct sockaddr_un addr;
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
strcpy(addr.sun_path, "/tmp/mysocket.sock");
// 绑定到套接字地址
if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
perror("bind");
exit(1);
}
// 监听
listen(sock, 5); // 设置最大等待连接数
// 接收连接请求
int client_sock;
if ((client_sock = accept(sock, NULL, NULL)) == -1) {
perror("accept");
exit(1);
}
// 发送和接收数据
char message[] = "Hello from Server";
write(client_sock, message, strlen(message));
read(client_sock, message, strlen(message));
close(client_sock);
close(sock);
```
在这个例子中,首先创建了一个套接字,然后指定其位置为"/tmp/mysocket.sock"。接着,服务器会监听该套接字,当有客户端尝试连接时,会建立一个新的连接并交换数据。
需要注意的是,Unix域套接字的安全性和权限管理相对简单,因为它们仅限于本地主机,并且默认只有所有者有权访问。同时,如果文件被删除或者服务器进程退出,相关的套接字连接将自动断开。
阅读全文