Chinaunix首页 | 论坛 | 博客
  • 博客访问: 222846
  • 博文数量: 48
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 412
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-24 10:27
个人简介

Continuous pursuit technical details

文章分类

全部博文(48)

文章存档

2014年(1)

2013年(47)

分类: C/C++

2013-12-10 15:16:16



#include  
#include         /* basic system data types */
#include        /* basic socket definitions */
#include        /* sockaddr_in{} and other Internet defns */
#include         /* inet(3) functions */
#include       /* select function*/


#include
#include
#include
#include


#define MAXLINE 10240
#define max(a,b)    ((a) > (b) ? (a) : (b))
//typedef struct sockaddr  SA;


void handle(int sockfd);


int main(int argc, char **argv)
{
    char * servInetAddr = "127.0.0.1";
    //int servPort = 9987;
    int servPort = 6888;
    char buf[MAXLINE];
    int connfd;
    struct sockaddr_in servaddr;


    if (argc == 2) {
        servInetAddr = argv[1];
    }
    if (argc == 3) {
        servInetAddr = argv[1];
        servPort = atoi(argv[2]);
    }
    if (argc > 3) {
        printf("usage: selectechoclient \n");
        return -1;
    }


    connfd = socket(AF_INET, SOCK_STREAM, 0);


    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(servPort);
    inet_pton(AF_INET, servInetAddr, &servaddr.sin_addr);


    if (connect(connfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) {
        perror("connect error");
        return -1;
    }
    printf("welcome to selectechoclient\n");
    handle(connfd);     /* do it all */
    close(connfd);
    printf("exit\n");
    exit(0);
}




void handle(int connfd)
{
    FILE* fp = stdin;
    char sendline[MAXLINE], recvline[MAXLINE];
    fd_set rset;
    FD_ZERO(&rset);
    int maxfds = max(fileno(fp), connfd) + 1;
    int nread;
    for (;;) {
        FD_SET(fileno(fp), &rset);
        FD_SET(connfd, &rset);


        if (select(maxfds, &rset, NULL, NULL, NULL) == -1) {
            perror("select error");
            continue;
        }


        if (FD_ISSET(connfd, &rset)) {
            //??????·????÷?ì??
            nread = read(connfd, recvline, MAXLINE);
            if (nread == 0) {
                printf("server close the connection\n");
                break;
            }
            else if (nread == -1) {
                perror("read error");
                break;
            }
            else {
                //server response
                write(STDOUT_FILENO, recvline, nread);
            }
        }


        if (FD_ISSET(fileno(fp), &rset)) {
            printf("entering send branch \n");
            //±ê×?????????
            if (fgets(sendline, MAXLINE, fp) == NULL) {
                //eof exit
                break;
            }
            else {
                write(connfd, sendline, strlen(sendline));
            }
        }


    }
}

阅读(1470) | 评论(0) | 转发(0) |
0

上一篇:select-server.c

下一篇:time.c

给主人留下些什么吧!~~