📅  最后修改于: 2023-12-03 15:20:54.233000             🧑  作者: Mango
Unix套接字是Unix中一种进程间通信机制,类似于Windows中的命名管道。它基于文件系统中的文件,通过文件名来寻址套接字,使得多个进程可以通过同一个套接字进行通信。
下面是一个基于Unix套接字的客户端示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#define SOCKET_PATH "/tmp/socket" // 定义套接字的路径
int main() {
// 创建一个套接字
int sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket");
exit(EXIT_FAILURE);
}
// 构建服务器地址
struct sockaddr_un server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sun_family = AF_UNIX;
strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);
// 连接服务器
if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
perror("connect");
exit(EXIT_FAILURE);
}
// 发送消息
const char* message = "Hello, server!";
ssize_t sent = send(sockfd, message, strlen(message), 0);
if (sent == -1) {
perror("send");
exit(EXIT_FAILURE);
}
// 接收响应
char buffer[1024];
ssize_t received = recv(sockfd, buffer, sizeof(buffer), 0);
if (received == -1) {
perror("recv");
exit(EXIT_FAILURE);
}
printf("Received message: %s\n", buffer);
// 关闭套接字
close(sockfd);
return 0;
}
首先,使用socket()函数创建了一个套接字。该函数返回一个整数类型的文件描述符,之后的所有操作都要使用它。
然后,构建服务器的地址。使用sockaddr_un结构体表示地址,其中sun_family成员表示地址族(AF_UNIX表示Unix域套接字),sun_path成员表示套接字的路径。
连接服务器。使用connect()函数连接服务器,这里的参数为套接字的文件描述符、服务器地址和地址长度。
发送消息。使用send()函数向服务器发送消息,这里的参数为套接字的文件描述符、要发送的消息指针、要发送的消息长度和一些可选的标志。
接收响应。使用recv()函数接收从服务器返回的消息,这里的参数为套接字的文件描述符、消息缓冲区的指针、消息缓冲区的长度和一些可选的标志。
最后,使用close()函数关闭套接字。
这是一个很简单的示例,展示了如何使用Unix套接字在不同的进程之间进行通信。企业级的应用希望能够在此基础上进行拓展,保证软件的稳定性和可扩展性。