<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            C語言

            c語言編程-標準步驟(改進版)

            時間:2025-03-31 10:15:43 C語言 我要投稿
            • 相關推薦

            c語言編程-標準步驟(改進版)

              server.c

              復制代碼 代碼如下:

              #include

              #include

              #include

              #include

              #include

              #include

              #include

              #include

              #include

              #include

              #include

              #define PORT 4444

              #define BACKLOG 5

              #define MAX_FD 256

              void setnonblocking(int);

              int main(int argc, char *argv[]) {

              int sock_fd, new_fd, new_fd2, epfd, nfds;

              struct sockaddr_in server_addr, client_addr;

              int sin_size;

              int nbytes;

              int on = 1;

              char buffer[1024];

              struct epoll_event ev, events[20];

              epfd = epoll_create(MAX_FD);

              if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

              perror("socket");

              exit(1);

              }

              setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));

              setnonblocking(sock_fd);

              ev.data.fd = sock_fd;

              ev.events = EPOLLIN | EPOLLET;

              epoll_ctl(epfd, EPOLL_CTL_ADD, sock_fd, &ev);

              memset(&server_addr, 0, sizeof(struct sockaddr_in));

              server_addr.sin_family = AF_INET;

              server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

              server_addr.sin_port = htons(PORT);

              if (bind(sock_fd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1) {

              perror("bind");

              exit(1);

              }

              if (listen(sock_fd, BACKLOG) == -1) {

              perror("listen");

              exit(1);

              }

              printf("Server start... n");

              sin_size = sizeof(struct sockaddr_in);

              int i;

              while (1) {

              nfds = epoll_wait(epfd, events, 20, 500);

              for (i = 0; i < nfds; i++) {

              if (events[i].data.fd == sock_fd) {

              if ((new_fd = accept(sock_fd, (struct sockaddr *)(&client_addr), &sin_size)) == -1) {

              perror("accept");

              exit(1);

              }

              printf("Server get connection from %sn", inet_ntoa(client_addr.sin_addr));

              setnonblocking(new_fd);

              ev.data.fd = new_fd;

              ev.events = EPOLLIN | EPOLLET;

              epoll_ctl(epfd, EPOLL_CTL_ADD, new_fd, &ev);

              } else if (events[i].events & EPOLLIN) {

              if ((new_fd2 = events[i].data.fd) < 0) continue;

              if ((nbytes = read(new_fd2, buffer, 1024)) == -1) {

              perror("read");

              exit(1);

              } else if (nbytes == 0) {

              close(new_fd2);

              events[i].data.fd = -1;

              }

              printf("Server read from %sn", inet_ntoa(client_addr.sin_addr));

              ev.data.fd = new_fd2;

              ev.events = EPOLLOUT | EPOLLET;

              epoll_ctl(epfd, EPOLL_CTL_MOD, new_fd2, &ev);

              } else if (events[i].events & EPOLLOUT) {

              new_fd2 = events[i].data.fd;

              write(new_fd2, "Server Received", 16);

              ev.data.fd = new_fd2;

              ev.events = EPOLLIN | EPOLLET;

              epoll_ctl(epfd, EPOLL_CTL_MOD, new_fd2, &ev);

              }

              }

              }

              return 0;

              }

              void setnonblocking(int fd) {

              int opts;

              if ((opts = fcntl(fd, F_GETFL)) < 0) {

              perror("fcntl(fd, F_GETFL");

              exit(1);

              }

              opts = opts | O_NONBLOCK;

              if (fcntl(fd, F_SETFL, opts) < 0) {

              perror("fcntl(fd, F_SETFL, opts");

              exit(1);

              }

              }

              client.c

              復制代碼 代碼如下:

              #include

              #include

              #include

              #include

              #include

              #include

              #include

              #define PORT 4444

              int main(int argc, char *argv[]) {

              int sock_fd;

              struct sockaddr_in server_addr;

              struct hostent *host;

              char buffer[1024];

              if (argc < 2) {

              perror("Need hostname");

              exit(1);

              }

              if ((host = gethostbyname(argv[1])) == NULL) {

              perror("gethostbyname");

              exit(1);

              }

              if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

              perror("socket");

              exit(1);

              }

              memset(&server_addr, 0, sizeof(struct sockaddr_in));

              server_addr.sin_family = AF_INET;

              server_addr.sin_port = htons(PORT);

              server_addr.sin_addr = *((struct in_addr *)host->h_addr);

              if (connect(sock_fd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1) {

              perror("connect");

              exit(1);

              }

              while (1) {

              printf("Please input something:n");

              fgets(buffer, 1024, stdin);

              write(sock_fd, buffer, strlen(buffer));

              read(sock_fd, buffer, 1024);

              printf("From server: %sn", buffer);

              }

              close(sock_fd);

              return 0;

              }

            【c語言編程-標準步驟(改進版)】相關文章:

            C編程語言概述10-20

            C語言編程基礎08-17

            C語言入門什么是編程語言10-12

            怎樣學習c++c語言編程10-26

            C語言高效編程的方法06-26

            如何學習C語言編程10-28

            C語言高效編程的幾招09-23

            C語言socket編程的方法10-07

            怎么學習C語言編程07-30

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看