📜  Unix套接字-客户端示例(1)

📅  最后修改于: 2023-12-03 15:20:54.233000             🧑  作者: Mango

Unix套接字-客户端示例
什么是Unix套接字?

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;
}
代码说明
  1. 首先,使用socket()函数创建了一个套接字。该函数返回一个整数类型的文件描述符,之后的所有操作都要使用它。

  2. 然后,构建服务器的地址。使用sockaddr_un结构体表示地址,其中sun_family成员表示地址族(AF_UNIX表示Unix域套接字),sun_path成员表示套接字的路径。

  3. 连接服务器。使用connect()函数连接服务器,这里的参数为套接字的文件描述符、服务器地址和地址长度。

  4. 发送消息。使用send()函数向服务器发送消息,这里的参数为套接字的文件描述符、要发送的消息指针、要发送的消息长度和一些可选的标志。

  5. 接收响应。使用recv()函数接收从服务器返回的消息,这里的参数为套接字的文件描述符、消息缓冲区的指针、消息缓冲区的长度和一些可选的标志。

  6. 最后,使用close()函数关闭套接字。

总结

这是一个很简单的示例,展示了如何使用Unix套接字在不同的进程之间进行通信。企业级的应用希望能够在此基础上进行拓展,保证软件的稳定性和可扩展性。