⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.c

📁 UNIX/Linux环境下使用UNIX domain协议实现的客户端和服务器端程序
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#include <string.h>#include <errno.h>#define BUFFER_SIZE	1024int main(int argc, char **argv){  int fd;  if (argc < 2)  {    fprintf(stdout, "Usage: %s <path>\n", argv[0]);    exit(1);  }  // XXX: step 1, socket();  //int socket(int domain, int type, int protocol);  if ((fd = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0)  {    fprintf(stderr, "socket() failed: %s\n", strerror(errno));    exit(1);  }  // XXX: step 2, bind() (optional)  // XXX: step 3, connect()  struct sockaddr_un remote_address;#if 0  struct sockaddr_un  {    sa_family_t sun_family;    char sun_path[108];  }#endif  memset(&remote_address, 0, sizeof(remote_address));  remote_address.sun_family = PF_LOCAL;  memcpy(remote_address.sun_path, argv[1], strlen(argv[1]));  //int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);  if (connect(fd, (struct sockaddr *) &remote_address, sizeof(remote_address)) < 0)  {    fprintf(stderr, "connect() failed: %s\n", strerror(errno));    // FIXME:     close(fd);    exit(1);  }  // XXX: step 4, r/w  char buffer[BUFFER_SIZE];  ssize_t n;again:  //ssize_t read(int fd, void *buf, size_t count);  if ((n = read(fd, buffer, BUFFER_SIZE)) < 0)  {    if (errno == EINTR)    {      goto again;    }    else    {      fprintf(stderr, "read() failed: %s\n", strerror(errno));      // FIXME:      close(fd);      exit(1);    }  }  else if (n == 0)  {    fprintf(stdout, "Connection closed by peer.\n");  }  else  {    buffer[n] = '\0';    fprintf(stdout, "read %d bytes from peer: %s\n", n, buffer);  }  // XXX: step 5, close()  close(fd);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -