guowenxue
2020-08-22 4f9a1657573f0a1ce24e63ad618ab60d238287b2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*********************************************************************************
 *      Copyright:  (C) 2012 Guo Wenxue<guowenxue@gmail.com>  
 *                  All rights reserved.
 *
 *       Filename:  test_client_sock.c
 *    Description:  This file 
 *                 
 *        Version:  1.0.0(10/30/2012~)
 *         Author:  Guo Wenxue <guowenxue@gmail.com>
 *      ChangeLog:  1, Release initial version on "10/30/2012 01:15:18 PM"
 *                 
 ********************************************************************************/
 
#include "cp_network.h"
#include "cp_logger.h"
#include "cp_proc.h"
#include "cp_time.h"
 
 
//#define SERV_ADDR              "192.168.1.175"
#define SERV_ADDR              "192.168.1.78"
//#define SERV_ADDR              "kkernel.oicp.net"
#define SERV_PORT              8880
 
int service_route(CP_SOCK *sock)
{
    int      rv;
 
    if( !sock ) 
        return -1;
 
    printf("Client socket [%d] get event: %d\n", sock->fd, sock->event.events);
    if(sock->event.events & EPOLLIN)
    {
        rv = cp_sock_recv(sock);
        if(!rv)
        {
            log_nrml("Socket [%d %s:%d] remote socket [%s:%d] disconnect, remove it now\n",
                    sock->fd, sock->laddr, sock->lport, sock->raddr, sock->rport);
 
            cp_fds_destroy_sock(sock);
            g_cp_signal.stop = 1;
 
            return 0;
        }
        else if(rv > 0)
        {
            log_nrml("Socket [%d %s:%d] receive [%d] bytes data:\n", sock->fd, sock->laddr, sock->lport, sock->rbuf->len);
            cp_log_dump(LOG_LEVEL_DEBUG, sock->rbuf->data, sock->rbuf->len);
            cp_string_clear_data(sock->rbuf);
        }
    }
 
    return 0;
}
 
 
/********************************************************************************
 *  Description:
 *   Input Args:
 *  Output Args:
 * Return Value:
 ********************************************************************************/
int main (int argc, char **argv)
{
    CP_FDS     *fds;
    CP_SOCK    *sock = NULL;
 
    if ( !cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_NRML, LOG_ROLLBACK_NONE) || cp_log_open() )
    //if ( !cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open() )
        return -1;
 
    cp_install_proc_signal();
 
    if( !(fds=cp_fds_init(NULL, CP_DEF_MAX_EVENTS, CP_DEF_FDS_TIMEOUT)) )
        return -2;
 
    while( !g_cp_signal.stop )
    {
        sock = cp_sock_connect_regist(fds, sock, SERV_ADDR, SERV_PORT, 0, service_route);
        if( sock && sock->status==SOCK_STAT_CONNECTING)
        {
            /* Connect is in progress */
            sleep(1);
            continue;
        }
        else if(!sock || sock->status!=SOCK_STAT_CONNECTED)
        {
            break;
        }
 
        cp_string_cstrcpy(sock->sbuf, "Hello World!\n");
        printf("Send buffer data: %s", cp_string_data(sock->sbuf));
        cp_sock_send(sock);
 
        cp_fds_detect_event(fds);
 
        cp_fds_proc_event(fds);
 
        micro_second_sleep(100);
    }
 
    cp_sock_term_all_service_clear(fds);
 
    cp_log_term();
 
    return 0;
} /* ----- End of main() ----- */