linux C语言 多线程 socket---一个简单的demo

服务器为客户端提供字符串检索功能(留供后查)完整代码请联系送信zhao.QIMI@yahoo.comserver侧代码////////////////////////////////////////////////////////////////author :qi//date :2019/4///////////////////////////////////////...
摘要由CSDN通过智能技术生成

服务器为客户端提供字符串检索功能(留供后查)

完整代码请联系送信zhao.QIMI@yahoo.com

server侧代码

//
//author  :qi
//date    :2019/4
//

#include "grepServer.h"

//log used
time_t msgTime;
char errMassage[MG_HAF_MAXLINE];


int main(int argc(), char** argv)
{
    //socket  used
    int socket_fd, connect_fd;
    struct sockaddr_in servAddr, clientAddr;
    int struct_len;
    
    //Initialization socket
    if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
        time(&msgTime);
        logWrite(__LINE__, &msgTime, errno, MGERR_SOCKET_INIT);
        exit(0);
    }

#ifdef MG_DEBUG
        // debug  trace
        time(&msgTime);
        sprintf(errMassage, "*************debug start**************");
        logWrite(__LINE__, &msgTime, errno, errMassage); 
#endif

    memset(&servAddr, 0, sizeof(servAddr));
    servAddr.sin_family       = AF_INET;
    servAddr.sin_addr.s_addr  = htonl(INADDR_ANY);
    servAddr.sin_port         = htons(MG_DEFALUT_PORT);
    bzero(&(servAddr.sin_zero), 8);
    struct_len = sizeof(struct sockaddr_in);

    if( bind(socket_fd, (struct sockaddr*)&servAddr, sizeof(servAddr)) == -1)
    {
        time(&msgTime);
        logWrite(__LINE__, &msgTime, errno, MGERR_SOCKET_BIND);
        exit(0);
    }

    if( listen(socket_fd, 10) == -1)
    {
        time(&msgTime);
        logWrite(__LINE__, &msgTime, errno, MGERR_SOCKET_LISTEN);
        exit(0);
    }

    //write server start time.
    time(&msgTime);
    logWrite(__LINE__, &msgTime, 0, MGERR_SOCKET_SUCCESS);

    // manage client request
    while(1)
    {
        pthread_t thread;
        if( (connect_fd = accept(socket_fd, (struct sockaddr*)&clientAddr, &struct_len)) == -1)
        {
            //printf("sockeip=%s,port=%d,connect_fd=%d.", inet_ntoa(clientAddr.sin_addr), clientAddr.sin_port, connect_fd);
            time(&msgTime);
            logWrite(__LINE__, &msgTime, errno, MGERR_MSG_RECV);
            exit(0);
        }

#ifdef MG_DEBUG
        // debug  trace
        time(&msgTime);
        sprintf(errMassage, "connect success! connect_fd = %d", connect_fd);
        logWrite(__LINE__, &msgTime, errno, errMassage); 
#endif
        // create child thread
        if(0 != pthread_create(&thread, NULL, mg_rec_data, (void*)(&connect_fd)))
        {  
            time(&msgTime);
            logWrite(__LINE__, &msgTime, errno, MGERR_CHILD_CREATE);
            exit(0); 
        }  
    }
    exit(0);
}


// child thread to handle client data
// connect_fd: socket handle

void *mg_rec_data(void *fd)
{
    int connect_fd;
    _MG_MSG_CTS cts_rcv_data;     //recv data
    _MG_MSG_STC stc_send_data;    //send data
    int ret

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值