TCP 通讯服务端平台/库 tcpdaemon 更新至 v1.2.2

简介:

1.2.2 2017-06-06 calvin

  • 封装更多的IO多路复用代码进tcpdaemon,使用者用tcpmain返回值设置等待事件
  • IO多路复用模型新增超时机制

1.概述
tcpdaemon是一个TCP通讯服务端平台/库,它封装了众多常见服务端进程/线程管理和TCP连接管理模型(Forking、Leader-Follow、IO-Multiplex、WindowsThreads Leader-Follow),使用者只需加入TCP通讯数据收发和应用逻辑代码就能快速构建出完整的TCP应用服务器。

...

2.使用示例
2.1.服务模型Forking,链接模式1,接收HTTP请求报文然后发送HTTP响应报文

使用者只需编写一个函数tcpmain,实现同步的接收HTTP请求报文然后发送HTTP响应报文回去

$ vi test_callback_http_echo.c
#include "tcpdaemon.h"

_WINDLL_FUNC int tcpmain( struct TcpdaemonServerEnvirment *p_env , int sock , void *p_addr )
{
    char    http_buffer[ 4096 + 1 ] ;
    long    http_len ;
    long    len ;

    /* 接收HTTP请求 */
    memset( http_buffer , 0x00 , sizeof(http_buffer) );
    http_len = 0 ;
    while( sizeof(http_buffer)-1 - http_len > 0 )
    {
        len = RECV( sock , http_buffer + http_len , sizeof(http_buffer)-1 - http_len , 0 ) ;
        if( len == 0 )
            return TCPMAIN_RETURN_CLOSE;
        if( len == -1 )
            return TCPMAIN_RETURN_ERROR;
        if( strstr( http_buffer , "\r\n\r\n" ) )
            break;
        http_len += len ;
    }
    if( sizeof(http_buffer)-1 - http_len <= 0 )
    {
        return TCPMAIN_RETURN_ERROR;
    }

    /* 发送HTTP响应 */
    memset( http_buffer , 0x00 , sizeof(http_buffer) );
    http_len = 0 ;
    http_len = sprintf( http_buffer , "HTTP/1.0 200 OK\r\nContent-length: 17\r\n\r\nHello Tcpdaemon\r\n" ) ;
    SEND( sock , http_buffer , http_len , 0 );

    return TCPMAIN_RETURN_CLOSE;
}

编译链接成test_callback_http_echo.so

$ gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -I. -I/home/calvin/include/tcpdaemon  -c test_callback_http_echo.c
$ gcc -g -fPIC -O2 -Wall -Werror -fno-strict-aliasing -shared -o test_callback_http_echo.so test_callback_http_echo.o -L. -L/home/calvin/lib -lpthread -ldl

用tcpdaemon直接挂接即可

$ tcpdaemon -m IF -l 0:9527 -s test_callback_http_echo.so -c 10 --tcp-nodelay --logfile $HOME/log/test_callback_http_echo.log --loglevel-debug
可```  
执行程序tcpdaemon所有命令行参数可以不带参数的执行而得到

$ tcpdaemon
USAGE : tcpdaemon -m IF -l ip:port -s so_pathfilename [ -c max_process_count ]

              -m LF -l ip:port -s so_pathfilename -c process_count [ -n max_requests_per_process ]
    other options :
              -v
              [ --daemon-level ]
              [ --work-path work_path ]
              [ --work-user work_user ]
执行后可在$HOME/log下可以看到tcpdaemon的日志。

通过curl发测试请求

$ curl "http://localhost:9527/"
Hello Tcpdaemon

测试成功!

所有代码在源码安装包的test目录里下可以找到

...

相关文章
|
网络协议 算法
【网络篇】第十二篇——TCP协议通讯流程
【网络篇】第十二篇——TCP协议通讯流程
【网络篇】第十二篇——TCP协议通讯流程
|
网络协议 Java
Java BIO tcp服务端向客户端消息群发代码教程实战
java BIO tcp服务端向客户端消息群发代码教程实战
169 0
Java BIO tcp服务端向客户端消息群发代码教程实战
|
网络协议 C++
C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)
C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)
529 0
C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)
|
网络协议
TCP编程中的客户端与服务端的通信实现
TCP编程中的客户端与服务端的通信实现
134 0
|
网络协议
TCP客户端与服务端
Socket(简称:套接字)是进程之间通信的一个工具,好比现实中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个socket,负责进程之间的网络数据传输,好比数据的搬运工
295 0
TCP客户端与服务端
|
网络协议 图形学
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
738 0
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
|
网络协议 Linux Windows
简单的TCP服务端
简单的TCP服务端
131 0
|
网络协议 C#
C#编程-60:简单的TCP通讯实例
C#编程-60:简单的TCP通讯实例
176 0
C#编程-60:简单的TCP通讯实例
|
网络协议 Java
Java网络编程Demo,使用TCP 实现简单群聊功能Groupchat,创建一个服务端,使多个客户端都能收到消息
Java网络编程Demo,使用TCP 实现简单群聊功能Groupchat,创建一个服务端,使多个客户端都能收到消息
207 0
Java网络编程Demo,使用TCP 实现简单群聊功能Groupchat,创建一个服务端,使多个客户端都能收到消息
|
网络协议 Java
Java网络编程Demo,使用TCP 实现简单群聊功能GroupchatSimple,多个客户端输入消息,显示在服务端的控制台
Java网络编程Demo,使用TCP 实现简单群聊功能GroupchatSimple,多个客户端输入消息,显示在服务端的控制台
190 0
Java网络编程Demo,使用TCP 实现简单群聊功能GroupchatSimple,多个客户端输入消息,显示在服务端的控制台