亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

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

2020-01-26 15:37:31
字體:
來源:轉載
供稿:網友

server.c

復制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/epoll.h>
#include <sys/errno.h>

#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 %s/n", 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 %s/n", 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#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: %s/n", buffer);
    }
    close(sock_fd);

    return 0;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久国产精品久久| 热久久99这里有精品| 97国产精品人人爽人人做| 欧美在线免费视频| 国产一区香蕉久久| 一道本无吗dⅴd在线播放一区| 92国产精品久久久久首页| 国产情人节一区| 日韩欧美国产一区二区| 日本aⅴ大伊香蕉精品视频| 成人网址在线观看| 久久资源免费视频| 在线日韩日本国产亚洲| 日韩av色综合| 亚洲欧美在线一区| 亚洲成人av在线| 日韩美女写真福利在线观看| 九九热最新视频//这里只有精品| 97视频在线观看成人| 亚洲另类激情图| 97av在线视频| 国产精品av网站| 久久久亚洲福利精品午夜| 亚洲午夜久久久久久久| 在线观看日韩欧美| 国产成人精品电影久久久| 日韩在线观看网址| 国产精品久久久久久久久借妻| 久久五月情影视| 亚洲精品国偷自产在线99热| 热久久视久久精品18亚洲精品| 成人在线免费观看视视频| 亚洲欧美国产一本综合首页| 久久精品国产免费观看| 亚洲理论在线a中文字幕| 欧美黑人性视频| 国产精品伦子伦免费视频| 亚洲国产日韩欧美在线图片| 亚洲欧美视频在线| 欧美一级淫片丝袜脚交| 992tv在线成人免费观看| 国产精品亚洲视频在线观看| 国产精品福利小视频| 国产精品国产三级国产专播精品人| 久久99久久99精品中文字幕| 国产中文字幕91| 日本一区二三区好的精华液| 久久久99久久精品女同性| 狠狠色狠狠色综合日日小说| 日韩欧美亚洲国产一区| 97人人做人人爱| 亚洲精品自拍第一页| y97精品国产97久久久久久| 在线视频亚洲欧美| 久久久亚洲精品视频| 国产一区二区日韩| 日韩精品极品在线观看| 国产精品成av人在线视午夜片| 另类专区欧美制服同性| 久久久久www| 伊人久久大香线蕉av一区二区| 91在线直播亚洲| 亚洲男人的天堂在线播放| 亚洲在线视频观看| 夜夜躁日日躁狠狠久久88av| 久久久久久香蕉网| 这里只有精品在线观看| 欧美丝袜一区二区| 亚洲欧美日韩一区在线| 日韩国产欧美精品一区二区三区| 国产精品第一视频| 亚洲丁香婷深爱综合| 久久亚洲一区二区三区四区五区高| 欧美亚洲日本黄色| 日韩欧美精品免费在线| 91久久久亚洲精品| 国产日韩欧美综合| 国内精品久久久久久中文字幕| 欧美激情亚洲另类| 最近2019年好看中文字幕视频| 欧美成人午夜视频| 亚洲va欧美va在线观看| 日韩女优人人人人射在线视频| 中文国产成人精品| 久久人人爽人人爽人人片av高清| 亚洲专区国产精品| 国产精品91久久| 在线精品国产成人综合| 日本一本a高清免费不卡| 中文字幕精品www乱入免费视频| 91po在线观看91精品国产性色| 亚洲国产精品免费| 亚洲xxxxx性| 欧美一级视频在线观看| 亚洲男人第一网站| 国产精品日韩在线播放| 97在线免费视频| 国产成人精品一区| 国产精品h在线观看| 尤物yw午夜国产精品视频| 欧洲亚洲免费视频| 国内精品一区二区三区| 国产欧美日韩免费看aⅴ视频| 久久久99久久精品女同性| 日韩视频精品在线| 亚洲国产欧美一区二区三区久久| 日韩精品黄色网| 欧美三级xxx| 日韩av三级在线观看| 国产成人av网| 久久人91精品久久久久久不卡| 亚洲国产精品999| 亚洲精品日韩欧美| 91精品国产91久久久久久久久| 国产亚洲精品久久久优势| 91亚洲精品在线观看| 日韩在线不卡视频| 久久久久久国产三级电影| 91精品久久久久久久久| 欧美一级片一区| 欧美一级在线亚洲天堂| 疯狂做受xxxx高潮欧美日本| 亚洲精品wwwww| 欧美午夜精品久久久久久久| 亚洲影院色无极综合| 欧美精品www在线观看| 性欧美办公室18xxxxhd| 国产91成人在在线播放| 成人精品视频99在线观看免费| 国产日本欧美一区二区三区在线| 欧美激情欧美狂野欧美精品| 欧美极品少妇xxxxⅹ免费视频| 国内精品久久久久影院优| 91久久国产精品| 国产精品∨欧美精品v日韩精品| 欧美激情精品久久久久久蜜臀| 国产欧亚日韩视频| 欧美成人精品三级在线观看| 色综合久久久888| 国产最新精品视频| 国产精品国产三级国产专播精品人| 精品视频中文字幕| 国内精品小视频在线观看| 久久99视频免费| 成人免费直播live| 2019中文字幕在线| 亚洲欧美成人精品| 国产精品揄拍一区二区| 国产91色在线|| 这里只有精品丝袜| 国产精品久久视频| 日韩av免费在线看| 成人在线视频网站| 欧美日韩视频在线| 欧美黄色性视频| 久久精品国产一区二区三区| 亚洲国产免费av| 成年人精品视频| 亚洲色无码播放| 在线免费观看羞羞视频一区二区| 日日噜噜噜夜夜爽亚洲精品| 亚洲精品福利免费在线观看| 97精品伊人久久久大香线蕉| 日韩美女福利视频|