zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/stone531/p/4782507.html
Copyright © 2011-2022 走看看