• linux c++ 服务器编程,收藏一个测试例子


    // server
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
    #include <malloc.h>
    #include <pthread.h>
    #include <semaphore.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/time.h>
    #include <sys/ioctl.h>
    #include <netinet/in.h>
    #include <errno.h>
    #include <string.h>
    #include"time.h"
     
     
    #define  SERVER_PORT 10000
    #define  MAX_BUF_SIZE  16
    #define  SUCCESS 0
    #define  FAILURE -1
     
    int RecvFromServer(int iClientSockFd);
     
    int main(int argc, char **argv)
    {
        int iServerSockFd;
        int iClientSockFd;
        struct sockaddr_in stServerAddr;
        struct sockaddr_in stClientAddr;
        int iServerLen;
        int iClientLen;
        int iOpt =1;
        int iReturn;
        pid_t  pid;
         
        // time 
        time_t timer;
        struct tm  *tblock;
        timer = time(NULL);
        tblock= localtime(&timer);
        printf("servertime is %s",asctime(tblock));
     
        printf("This is the Server.
    ");
        printf("I am waiting the client to rsync time 
    ");
     
        // create server socket
        iServerSockFd = socket(AF_INET, SOCK_STREAM, 0);
        if (iServerSockFd < 0)
        {
            printf("socket create failed in CommManageServerRecvThread.
    ");
        return FAILURE;
        }
        stServerAddr.sin_family = AF_INET;
        stServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
        stServerAddr.sin_port = htons(SERVER_PORT);
        iServerLen = sizeof(stServerAddr);
     
        // bind socket
        iReturn = bind(iServerSockFd, (struct sockaddr *)&stServerAddr, iServerLen);
        if (iReturn < 0)
        {
        printf("socket bind failed in CommManageServerRecvThread.
    ");
     
        }
     
        setsockopt(iServerSockFd,SOL_SOCKET,SO_REUSEADDR,&iOpt,sizeof(iOpt));
     
        // listen socket
        iReturn = listen(iServerSockFd, 10);
     
        // accept request from client
        while(1)
        {
        iClientSockFd = accept(iServerSockFd, (struct sockaddr*)&stClientAddr, (unsigned *)&iClientLen);
        if (iServerSockFd < 0)
        {
            printf("accept failed.
    ");
             
        }
        pid = fork();    
        switch(pid)
        {
            case -1:
            {
                printf("fork failed.
    ");
                break;
            }
            case 0:
            {
               write(iClientSockFd,asctime(tblock),30);
               printf("child service ok!!
    ");
               close(iClientSockFd);
               break;
            }
            default:
            {
                close(iClientSockFd);
                break;
            }
        }
     
        }
     
        close(iClientSockFd);
     
        close(iServerSockFd);
     
        return SUCCESS;
    }
     
    int RecvFromServer(int iClientSockFd)
    {
        char acBuf[MAX_BUF_SIZE];
        int iReadNum;
     
        memset(acBuf, 0, sizeof(acBuf));
     
        iReadNum = recv(iClientSockFd, acBuf, 0xFFFF, 0);
        if(iReadNum < 0)
        {
            printf("read failed.
    ");
            return FAILURE;
        }
     
        printf("Receive form client:
    ");
        printf("%s
    ", acBuf);
     
        return SUCCESS;
    }
     
     
     
     
     
    // client
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
    #include <malloc.h>
    #include <pthread.h>
    #include <semaphore.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/time.h>
    #include <sys/ioctl.h>
    #include <netinet/in.h>
    #include <errno.h>
    #include <string.h>
     
     
    #define  SERVER_PORT 10000
    #define  SERVER_IP   "192.168.0.112"
    #define  WRITE_BUF_SIZE  1024
     
    #define  SUCCESS 0
    #define  FAILURE -1
    char acBuf[WRITE_BUF_SIZE];
     
    int my_read(int fd,void *buffer,int length) 
    {        
             int bytes_left;
             int bytes_read;
             char *ptr;     
             bytes_left=length; 
              
             ptr=buffer;
                  
             while(bytes_left>0)         
             {          
                bytes_read=read(fd,ptr,bytes_left);
                if(bytes_read<0) 
                     {        
                      if(errno==EINTR) 
                          bytes_read=0;
                      else                 
                          return -1;
                      }              
                else
                   if(bytes_read==0)     
                         break;
                  bytes_left -= bytes_read; 
                  ptr+=bytes_read;    
              }     
              return(length-bytes_left);
    }
     
    int main(int argc, char **argv)
    {
        int iSockFd;
        int iReadNum;
         
        struct sockaddr_in stServerAddr;
        struct sockaddr_in stClientAddr;
        int iServerLen;
        int iClientLen;
        int iReturn;
         
     
        printf("This is the client.
    ");
     
     
        // create server socket
        iSockFd = socket(AF_INET, SOCK_STREAM, 0);
        if (iSockFd < 0)
        {
            printf("socket create failed in CommManageServerRecvThread.
    ");
            return FAILURE;
        }
        stServerAddr.sin_family = AF_INET;
        inet_pton(AF_INET, SERVER_IP, &stServerAddr.sin_addr);
        stServerAddr.sin_port = htons(SERVER_PORT);
     
        iServerLen = sizeof(stServerAddr);
     
        while(1)
        {    
            //printf("try to connect to the server... ...
    ");
            iReturn = connect(iSockFd, (const struct sockaddr *)&stServerAddr, iServerLen);
            if(iReturn >= 0)
            {
                break;
            }
     
            sleep(3);
        }
     
        printf("connect SUCCESS.
    ");
         
        memset(acBuf, 0, sizeof(acBuf));
         
        my_read(iSockFd, acBuf, 30);
          
        printf("%s
    ",acBuf);
     
        close(iSockFd);
     
        return SUCCESS;
    }
    View Code
  • 相关阅读:
    C++如何在Dialog和View中显示梯度背景颜色
    C++MFC的关键类(View,Application,Frame,Document等等)之间访问方法列表
    C++深入分析MFC文档视图结构(项目实践)
    C++如何修改SDI程序的默认背景颜色
    BAPI使用HR_INFOTYPE_OPERATION函数批量导入HR信息纪录代码样例(0759信息类型)
    C++在单文档的应用程序增加多个视图
    SD定价过程的16个字段的作用说明
    HR上载信息类型的长文本的样例代码
    C++在工具条中加入组合框控件
    C++如何锁定splitter窗口
  • 原文地址:https://www.cnblogs.com/stone531/p/4782507.html
Copyright © 2020-2023  润新知