C++単純実装C/Sモデル

6002 ワード

Server.c
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define SERV_PORT 9988

int main(void)
{
    int sfd, cfd;
    int len, i;
    char buf[BUFSIZ], clie_IP[BUFSIZ];

    struct sockaddr_in serv_addr, clie_addr;
    socklen_t clie_addr_len;

    /*    socket   IPv4    TCP  */
    sfd = socket(AF_INET, SOCK_STREAM, 0);

    /*          man 7 ip       */
    bzero(&serv_addr, sizeof(serv_addr));           //        
    serv_addr.sin_family = AF_INET;                 //      IPv4
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);  //      IP  
    serv_addr.sin_port = htons(SERV_PORT);          //         

    /*         */
    bind(sfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));

    /*      ,       */
    listen(sfd, 64);                                //                   

    printf("wait for client connect ...
"
); /* */ clie_addr_len = sizeof(clie_addr_len); /* 1 sfd; 2 , 3 , client */ cfd = accept(sfd, (struct sockaddr *)&clie_addr, &clie_addr_len); /* , */ printf("client IP:%s\tport:%d
"
, inet_ntop(AF_INET, &clie_addr.sin_addr.s_addr, clie_IP, sizeof(clie_IP)), ntohs(clie_addr.sin_port)); while (1) { /* */ len = read(cfd, buf, sizeof(buf)); write(STDOUT_FILENO, buf, len); /* */ for (i = 0; i < len; i++) buf[i] = toupper(buf[i]); /* */ write(cfd, buf, len); } /* */ close(sfd); close(cfd); return 0; }

Client.c
#include 
#include 
#include 
#include 
#include 

#define SERV_IP "127.0.0.1"
#define SERV_PORT 9988

int main(void)
{
    int sfd, len;
    struct sockaddr_in serv_addr;
    char buf[BUFSIZ]; 

    /*    socket   IPv4 TCP*/
    sfd = socket(AF_INET, SOCK_STREAM, 0);

    /*         :*/
    bzero(&serv_addr, sizeof(serv_addr));                       //  
    serv_addr.sin_family = AF_INET;                             //IPv4   
    inet_pton(AF_INET, SERV_IP, &serv_addr.sin_addr.s_addr);    //  IP                3:    
    serv_addr.sin_port = htons(SERV_PORT);                      //             

    /*               */
    connect(sfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));

    while (1) {
        /*         */
        fgets(buf, sizeof(buf), stdin);
        /*        */
        write(sfd, buf, strlen(buf));       //     
        /*           */
        len = read(sfd, buf, sizeof(buf));
        /*      */
        write(STDOUT_FILENO, buf, len);
    }

    /*    */
    close(sfd);

    return 0;
}