TCP server/client

Last-modified: 2011-12-12 (月) 19:03:43

TCP server/client

#include
#include
#include
#include

#include
#include
#include
#include

void err_func(char *msg)
{
        perror(msg);
        exit(EXIT_FAILURE);
}

int main(int argc, char **argv)
{
        int sockfd, len, new_sockfd;
        char buf[BUFSIZ];
        struct sockaddr_in serv, clt;
        socklen_t sin_siz;
        unsigned short port;

        if(argc != 3)
        {
                printf("usage: progname ip port\n");
                exit(EXIT_FAILURE);
        }

        if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
                err_func("socket");

        serv.sin_family = PF_INET;
        port = (unsigned short)atoi(argv[2]);
        serv.sin_port = htons(port);
        inet_aton(argv[1], &(serv.sin_addr));
        sin_siz = sizeof(struct sockaddr_in);

        if(bind(sockfd, (struct sockaddr *)&serv, sin_siz) < 0)
                err_func("bind");

       if(listen(sockfd, SOMAXCONN) < 0)
                err_func("listen");

        while(1)
        {
                if((new_sockfd = accept(sockfd, (struct sockaddr *)&clt, &sin_siz)) < 0)
                        err_func("accept");

                printf("connect from %s : %u\n", inet_ntoa(clt.sin_addr), ntohs(clt.sin_port));
                memset(buf, 0, BUFSIZ);

                while(strncmp(buf, "EXIT\r\n", 6) != 0 && strncmp(buf, "EXIT\n", 5) != 0)
                {
                        len = recv(new_sockfd, buf, BUFSIZ, 0);
                        buf[len] = '\0';
                        printf("<- %s", buf);
                        len = send(new_sockfd, buf, len, 0);
                }
                close(new_sockfd);
        }
        close(sockfd);
        return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include

void err_func(char *msg)
{
        perror(msg);
        exit(EXIT_FAILURE);
}

int main(int argc, char **argv)
{
        int sockfd, len;
        char buf[BUFSIZ];
        struct sockaddr_in serv;
        unsigned short port;

        if(argc != 3)
        {
                printf("usage: progname serv_ip serv_port\n");
                exit(EXIT_FAILURE);
        }

        if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
                err_func("socket");

        serv.sin_family = PF_INET;
        port = (unsigned short)atoi(argv[2]);
        serv.sin_port = htons(port);
        inet_aton(argv[1], &(serv.sin_addr));

        if(connect(sockfd, (struct sockaddr *)&serv, sizeof(struct sockaddr_in)) < 0)
                err_func("connect");
        do
        {
                printf("-> ");
                fgets(buf, BUFSIZ, stdin);
                len = strlen(buf);
                len = send(sockfd, buf, len, 0);
                len = recv(sockfd, buf, len, 0);
                buf[len] = '\0';
                printf("<- %s\n", buf);
        }while(strncmp(buf, "EXIT\r\n", 6) != 0 && strncmp(buf, "EXIT\n", 5) != 0);

        close(sockfd);
        return 0;
}