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

📄 cherry.c

📁 用五个实例来解释linux下的c编程
💻 C
字号:
/******* 服务器程序  cherry.c ************/#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <netdb.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/socket.h>#define WAITBUF 10#define BUFSIZE 1024intmain (int argc, char *argv[]){  int sockfd, accept_sock;  struct sockaddr_in server_addr;  struct sockaddr_in client_addr;  socklen_t sin_size = sizeof (struct sockaddr_in);  char reply[] = "I love you too!";  char buffer[1024] = { 0 };  int portnumber;  int nread;  if (argc != 2)    {      fprintf (stderr, "Usage:%s portnumber\a\n", argv[0]);      exit (1);    }  /* 端口号不对,退出 */  if ((portnumber = atoi (argv[1])) < 0)    {      fprintf (stderr, "Usage:%s portnumber\a\n", argv[0]);      exit (1);    }  /* 服务器端开始建立socket描述符 */  if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) == -1)    {      fprintf (stderr, "Socket error:%s\n\a", strerror (errno));      exit (1);    }  /* 服务器端填充sockaddr结构 */  bzero (&server_addr, sizeof (struct sockaddr_in));  server_addr.sin_family = AF_INET;  /* 自动填充主机IP */  server_addr.sin_addr.s_addr = htonl (INADDR_ANY);  server_addr.sin_port = htons (portnumber);  /* 捆绑sockfd描述符 */  if (bind      (sockfd, (struct sockaddr *) (&server_addr),       sizeof (struct sockaddr)) == -1)    {      fprintf (stderr, "Bind error:%s\n\a", strerror (errno));      exit (1);    }  /* 监听sockfd描述符 */  if (listen (sockfd, WAITBUF) == -1)    {      fprintf (stderr, "Listen error:%s\n\a", strerror (errno));      exit (1);    }  /* 服务器阻塞,直到客户程序建立连接 */  if ((accept_sock =       accept (sockfd, (struct sockaddr *) (&client_addr), &sin_size)) == -1)    {      fprintf (stderr, "Accept error:%s\n\a", strerror (errno));      exit (1);    }  /* 接收并打印客户端发来的数据 */  if ((nread = recv (accept_sock, buffer, sizeof (buffer), 0)) == -1)    {      fprintf (stderr, "recv Error:%s\n", strerror (errno));      exit (1);    }  printf ("%s\n", buffer);  memset (buffer, 0, sizeof (buffer));  /* 回复 */  if (send (accept_sock, reply, strlen (reply), 0) == -1)    {      fprintf (stderr, "Send Error:%s\n", strerror (errno));      exit (1);    }  /* 结束通讯 */  close (accept_sock);  close (sockfd);  exit (0);}

⌨️ 快捷键说明

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