Linux 域套接字编程实例分析

提供一个 Linux 域套接字编程的实用示例,并结合代码阐述其工作原理和关键步骤。

// 服务端代码示例

// ... 头文件和错误处理 ...

int main() {
  int socket_fd, client_fd;
  struct sockaddr_un server_addr, client_addr;
  socklen_t client_addr_len;
  char buffer[1024];

  // 创建域套接字
  socket_fd = socket(AF_UNIX, SOCK_STREAM, 0);
  // ... 错误处理 ...

  // 绑定地址
  memset(&server_addr, 0, sizeof(server_addr));
  server_addr.sun_family = AF_UNIX;
  strcpy(server_addr.sun_path, "socket_path");
  unlink("socket_path");
  bind(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
  // ... 错误处理 ...

  // 监听连接
  listen(socket_fd, 5);
  // ... 错误处理 ...

  // 接受连接
  client_addr_len = sizeof(client_addr);
  client_fd = accept(socket_fd, (struct sockaddr *)&client_addr, &client_addr_len);
  // ... 错误处理 ...

  // 读取数据
  read(client_fd, buffer, sizeof(buffer));
  // ... 处理数据 ...

  // 发送数据
  write(client_fd, buffer, strlen(buffer) + 1);

  // 关闭连接
  close(client_fd);
  close(socket_fd);

  return 0;
}

代码解析:

  1. 创建套接字: 使用 socket(AF_UNIX, SOCK_STREAM, 0) 创建一个流类型的域套接字。
  2. 绑定地址: 使用 bind() 函数将套接字绑定到指定的路径。
  3. 监听连接: 使用 listen() 函数监听来自客户端的连接请求。
  4. 接受连接: 使用 accept() 函数接受客户端连接请求,并返回一个新的套接字用于与客户端通信。
  5. 数据传输: 使用 read()write() 函数进行数据的接收和发送。
  6. 关闭连接: 使用 close() 函数关闭套接字。

客户端代码示例:

// ... 头文件和错误处理 ...

int main() {
  int socket_fd;
  struct sockaddr_un server_addr;
  char buffer[1024];

  // 创建域套接字
  socket_fd = socket(AF_UNIX, SOCK_STREAM, 0);
  // ... 错误处理 ...

  // 连接服务器
  memset(&server_addr, 0, sizeof(server_addr));
  server_addr.sun_family = AF_UNIX;
  strcpy(server_addr.sun_path, "socket_path");
  connect(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
  // ... 错误处理 ...

  // 发送数据
  write(socket_fd, "Hello from client", strlen("Hello from client") + 1);

  // 读取数据
  read(socket_fd, buffer, sizeof(buffer));
  // ... 处理数据 ...

  // 关闭连接
  close(socket_fd);

  return 0;
}

代码解析:

  1. 创建套接字: 与服务端类似,使用 socket() 函数创建域套接字。
  2. 连接服务器: 使用 connect() 函数连接到服务器地址。
  3. 数据传输: 使用 write()read() 函数进行数据的发送和接收。
  4. 关闭连接: 使用 close() 函数关闭套接字。

总结

通过实例代码详细介绍了 Linux 域套接字编程的基本流程和关键步骤,并对代码进行了详细的解析,帮助读者更好地理解和应用域套接字进行进程间通信。

pdf 文件大小:25.95KB