diff --git a/mbtk/test/tcp_test.c b/mbtk/test/tcp_test.c
new file mode 100755
index 0000000..51daace
--- /dev/null
+++ b/mbtk/test/tcp_test.c
@@ -0,0 +1,176 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <pthread.h>
+#include <sys/epoll.h>
+#include <string.h>
+#include <fcntl.h>
+#include <signal.h>
+
+#include "mbtk_tcpip.h"
+#include "mbtk_log.h"
+
+
+static void help()
+{
+    printf("\n************************************************************************\n");
+    printf("net_open: Open network.\n");
+    printf("net_close: Close network.\n");
+    printf("link_open <link_id> <ser_addr> <ser_port> <loc_port> <TCP/UDP> <CLI/SER> <ack> <ssl> <ignore_cert> <heartbeat_time> <delay_time> <read_cb>: Open link.\n");
+    printf("link_close <link_id>: Close link.\n");
+    printf("send <link_id> <data>:Send data.\n");
+    printf("recv <link_id> <len>:Recv data.\n");
+    printf("traffic_reset <link_id>:Traffic reset.\n");
+    printf("traffic_get <link_id>:Traffic get.\n");
+    printf("state_get <link_id>:Link state get.\n");
+    printf("tcp_info <link_id>:TCP information state get.\n");
+    printf("\n************************************************************************\n");
+}
+
+static void sig_process(int sig)
+{
+    LOGI("I got signal %d\n", sig);
+    switch(sig)
+    {
+        case SIGINT: // Ctrl + C
+        {
+            LOGI("Exit by SIGINT.\n");
+            mbtk_tcpip_err_enum err = mbtk_tcpip_net_close();
+            if(err == MBTK_TCPIP_ERR_SUCCESS) {
+                printf("Net close success.\n");
+            } else {
+                printf("Net close fail:%d\n", err);
+            }
+            exit(0);
+        }
+        case SIGQUIT: // Ctrl + \ (类似 SIGINT ，但要产生core文件)
+        {
+            LOGI("Exit by SIGQUIT.\n");
+            mbtk_tcpip_err_enum err = mbtk_tcpip_net_close();
+            if(err == MBTK_TCPIP_ERR_SUCCESS) {
+                printf("Net close success.\n");
+            } else {
+                printf("Net close fail:%d\n", err);
+            }
+            exit(0);
+        }
+        case SIGTERM:// 默认kill   (同 SIGKILL ，但 SIGKILL 不可捕获)
+        {
+            LOGI("Exit by SIGTERM.\n");
+            mbtk_tcpip_err_enum err = mbtk_tcpip_net_close();
+            if(err == MBTK_TCPIP_ERR_SUCCESS) {
+                printf("Net close success.\n");
+            } else {
+                printf("Net close fail:%d\n", err);
+            }
+            exit(0);
+        }
+        case SIGTSTP:// Ctrl + Z (同 SIGSTOP ，但 SIGSTOP 不可捕获)
+        {
+            LOGI("Exit by SIGTSTP.\n");
+            exit(0);
+        }
+        case SIGSEGV: // 如空指针
+        {
+            LOGI("Exit by SIGSEGV.\n");
+            exit(0);
+        }
+        default:
+        {
+            LOGI("Unknown sig:%d\n",sig);
+            break;
+        }
+    }
+}
+
+void tcpip_print_tcp_info(mbtk_tcpip_tcp_state_info_s *info)
+{
+    printf("Link - %d\n", info->link_id);
+    printf("fd - %d\n", info->sock_fd);
+    printf("State - %d\n", info->state);
+    printf("Recv data length - %d\n", info->recv_data_len);
+}
+
+void tcpip_read_cb(int link_id, const char* data, int data_len)
+{
+    printf("\nRECV(%d-%d):%s\n", link_id, data_len, data);
+}
+
+void tcpip_net_callback_func(int state, const char* addr)
+{
+    if(state) {
+        printf("Net conncect, IP : %s\n", addr);
+    } else {
+        printf("Net disconnect.\n");
+    }
+}
+
+
+int main(int argc, char *argv[])
+{
+
+
+    printf(">>>>>>>>>>>START TCP TEST>>>>>>>>>>>>>\r\n");
+    mbtk_tcpip_err_enum err;
+        
+    mbtk_tcpip_info_t info;
+    memset(&info, 0x0, sizeof(mbtk_tcpip_info_t));
+    char *ip = "www.chaixiongfeng.group";
+    strcpy(&info.ser_addr,ip);
+    info.link_id=1;
+    info.ser_port =45002;
+    info.prot_type = MBTK_SOCK_TCP;
+    info.tcpip_type = MBTK_TCPIP_TYPE_CLIENT;
+    info.read_cb = NULL;
+        
+
+    err = mbtk_tcpip_sock_open((const mbtk_tcpip_info_t*)(&info));
+    if(err == MBTK_TCPIP_ERR_SUCCESS) {
+        printf("Link open success.\n");
+    } else {
+        printf("Link open fail:%d\n", err);
+        return 0;
+    }
+    
+    while(1)
+    {
+        char *data="stargcharge connect\r\n";
+        int len = mbtk_tcpip_send(1, data, strlen(data), NULL, 0);
+        if(len == strlen(data)) 
+        {
+            printf("Send success:%d.\n", len);
+        } 
+        else 
+        {
+            printf("Send fail:%d/%d\n", len, strlen(data));
+        }
+
+        char buff[128];
+        len = mbtk_tcpip_read(1, buff, 128);
+        if(len > 0) 
+        {
+            printf("RECV[%d]:%s\n", len, buff);
+        }
+        else 
+        {
+            printf("RECV fail:%d\n", len);
+        }
+
+        err = mbtk_tcpip_sock_close(1);
+        if(err == MBTK_TCPIP_ERR_SUCCESS) 
+        {
+            printf("Link close success.\n");
+        } 
+        else 
+        {
+            printf("Link close fail:%d\n", err);
+        }
+        sleep(5);
+    }      
+}
+
+
