古之成大事者,不唯有超世之才,亦唯有堅韌不拔之志也!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            3 隨筆 :: 44 文章 :: 1 評論 :: 0 Trackbacks
          server.c
            #include   <sys/types.h>  
            #include   
          <sys/socket.h>  
            #include   
          <arpa/inet.h>  
            #include   
          <netinet/in.h>  
            #include   
          <sys/param.h>  
            #include   
          <sys/types.h>  
            #include   
          <errno.h>  
            #include   
          <sys/stat.h>  
            #include   
          <stdio.h>  
            #include   
          <stdlib.h>  
            #include   
          <unistd.h>  
            #include   
          <stropts.h>  
            #include   
          <string.h>  
            #include   
          <pthread.h>  
            #include   
          <strings.h> 
            #include   
          <signal.h> 
             
            
          #define   SERV_PORT   1685 
            
          #define   STRINGLEN   255  
            
          #define   DATALENGTH   1024  
            
          #define IP "172.18.215.24"
             
             
          void alarm_timeout();
            
          /*數據的傳輸結構*/  
            
          struct DataInfo  
            {  
                
          char   chRemotePath[STRINGLEN];  
                
          char   chFileName[STRINGLEN];  
                
          int    iFileLen;  
                
          int    iDataLen;  
                
          char   chData[DATALENGTH];  
            };  
            typedef 
          struct DataInfo S_DataInfo;
             
            
          int   main(int   argc,   char   **argv)  
            {  
                
          int   iSockfd,   iNewSockfd;  
                
          int remote_len;
                
          char  remote_ip[64];  
                
          struct   sockaddr_in   MyAddr;    
                
          struct   sockaddr_in   TheirAddr;   
                
          struct sockaddr_in cli_addr = {AF_INET}; 
                
          int   iSinSize;  
                S_DataInfo  data, 
          *buffer;   
                buffer   
          =   (S_DataInfo*)malloc(sizeof(S_DataInfo));  
                 
                bzero(
          &MyAddr,   sizeof(MyAddr));  
                bzero(
          &data,   sizeof(data));  
                 
                
          /*往data中填入測試數據*/  
                
          //strcpy(data.chData,   "\"This   sentence   is   from   server.\"");  
                
          //data.iDataLen   =   strlen(data.chData);  
                 
                
          if((iSockfd   =   socket(AF_INET,   SOCK_STREAM,   0))   ==   -1)  
                {  
                    perror(
          "socket()");  
                    exit(
          -1);    
                }  
                MyAddr.sin_family   
          =   AF_INET;  
                MyAddr.sin_port   
          =   htons(SERV_PORT);  
                MyAddr.sin_addr.s_addr   
          =   inet_addr(IP);  
                
          if(bind(iSockfd,   (struct   sockaddr_in   *)&MyAddr,   sizeof(struct   sockaddr_in))   ==   -1)  
                {  
                    close(iSockfd);  
                    perror(
          "bind()");    
                    exit(
          -1);    
                }  
                
          if(listen(iSockfd,   10)   ==   -1)  
                {  
                    close(iSockfd);  
                    perror(
          "listen()");    
                    exit(
          -1);  
                }  
                signal(SIGCLD,SIG_IGN);
                
          for(;;)  
                {    
                iSinSize   
          =   sizeof(struct   sockaddr_in);    
                printf(
          "Waiting\n");  
                
          if((iNewSockfd   =   accept(iSockfd,   (struct   sockaddr_in   *)&TheirAddr,   &iSinSize))   ==   -1)  
                {  
                    close(iSockfd);  
                    perror(
          "accept()");    
                    exit(
          -1);    
                }  
                printf(
          "Server:   got   connection   from   %s\n",   inet_ntoa(TheirAddr.sin_addr));    
                
          int i = 0;
                
          switch(fork())  
                {  
                    
          case   -1:  
                        close(iSockfd);  
                        close(iNewSockfd);  
                        perror(
          "fork()");  
                        exit(
          -1);  
                    
          case   0:  
                        
                         
          //sleep(120); 
                         
          //printf("sleep ok\n");
                        while (i++ < 2)
                        { 
                            
          /*
                            
                             getpeername(iNewSockfd,(struct sockaddr *)&cli_addr,&remote_len);
                                           strcpy(remote_ip,(char *)inet_ntoa(cli_addr.sin_addr));
                                           printf("client ip is %s \n",remote_ip);
                                           signal( SIGALRM, alarm_timeout );
                                           alarm(200); 
                            if(read(iNewSockfd,   buffer,   sizeof(S_DataInfo))   <=   0)  
                            {  
                                close(iSockfd);  
                                close(iNewSockfd);  
                                printf("read data error !!");
                                exit(-1);  
                            }  
                            alarm(0);
                            printf("read data success ,datalen = %d,data =[%s]\n",buffer->iDataLen,buffer->chData); 
                            
          */
                            
          //sleep(10);
                            sleep(11);
                                strcpy(data.chData, 
          "server receive data "); 
                                strcat(data.chData, buffer
          ->chData);
                                      data.iDataLen   
          =   strlen(data.chData);  
                             
                            
          if(write(iNewSockfd,   &data,   sizeof(S_DataInfo))   ==   -1)  
                            {  
                                close(iSockfd);  
                                close(iNewSockfd);  
                                perror(
          "write()");  
                                exit(
          -1);  
                            } 
                            
                            
          //if( (data.iDataLen == 4) && (strcmp(data.chData,"exit") == 0) )
                            
          //    break;
                        }
                         
                        printf(
          "send and receive is   complete.\n");   
                        close(iNewSockfd);  
                        exit(
          0);  
                
          default:  
                        
          /*父進程中處理*/  
                       close(iNewSockfd);
                }
          /*end   switch*/  
                 
                }  
          /*end for(;;)*/
                free(buffer);
                
          return   0;  
            }   
            
            
          void alarm_timeout()
          {
              printf(
          "alarm_timeout ok\n");
              exit(
          0);
              
          }
           

          client.c
            #include   <stdio.h>  
            #include   
          <string.h>  
            #include   
          <errno.h>  
            #include   
          <sys/types.h>  
            #include   
          <sys/socket.h>  
            #include   
          <netinet/in.h>  
            #include   
          <arpa/inet.h>  
             
            
          #define   SERV_PORT   1685 
            
          #define   STRINGLEN   255  
            
          #define   DATALENGTH   1024  
            
          #define IP "172.16.215.149"   
             
             
          /*數據的傳輸結構*/  
            
          struct DataInfo  
            {  
                
          char   chRemotePath[STRINGLEN];  
                
          char   chFileName[STRINGLEN];  
                
          int    iFileLen;  
                
          int    iDataLen;  
                
          char   chData[DATALENGTH];  
            };  
            typedef 
          struct DataInfo S_DataInfo;
            
            
          int   main()  
            {  
                
          int   sock;  
                
          struct   sockaddr_in   sin;  
                S_DataInfo  data, 
          *buffer;   
                buffer   
          =   (S_DataInfo*)malloc(sizeof(S_DataInfo));  
                 
                bzero(
          &data,   sizeof(data));  
                 
                sock   
          =   socket(AF_INET,   SOCK_STREAM,   0);  
                
          if   (sock   ==   -1)  
                {  
                    perror(
          "client   socket");  
                    
          return   -1;  
                }  
                 
                memset(
          &sin,   0,   sizeof(sin));  
                sin.sin_family   
          =   AF_INET;  
                sin.sin_addr.s_addr   
          =   inet_addr(IP);  
                sin.sin_port   
          =   htons(SERV_PORT);  
                 
                
          if   (connect(sock,   (struct   sockaddr   *)&sin,   sizeof(sin))   ==   -1)  
                {  
                    perror(
          "client   connect   error");  
                    
          return   -1;  
                }  
                
          int i = 0;
                
          //sleep(120);
                printf("sleep ok\n");  
                
          while (i++ < 10)
                {
                    data.iDataLen 
          = 1;
                    data.chData[
          0= i + 48;
                    
                    
          //send
                    if(write(sock,    &data,   sizeof(S_DataInfo))   <= 0){
                               printf(
          "send data %d error\n",i);  
                               
          return   -1;  
                      }
                      printf(
          "send data [%s] ok\n",data.chData);
                     
                      
          //receive
                      /*
                         if (read(sock,  buffer,   sizeof(S_DataInfo)) <= 0){
                               printf("revdata %d error",i);  
                               return   -1;  
                      }
                      printf("receive data [%s] ok\n",buffer->chData);
                      
          */
                    
                }  
                 
                close(sock);  
            }   
           


          posted on 2008-09-18 11:10 goto 閱讀(1376) 評論(0)  編輯  收藏 所屬分類: SOCKET
          主站蜘蛛池模板: 黔西| 乌兰察布市| 南涧| 平度市| 木兰县| 新营市| 伊川县| 禄劝| 玉田县| 湖北省| 屯昌县| 穆棱市| 嘉善县| 济南市| 仪陇县| 兴业县| 阿合奇县| 旬邑县| 多伦县| 屯门区| 平凉市| 连南| 垣曲县| 康乐县| 双牌县| 南通市| 伊春市| 那曲县| 屏南县| 北辰区| 石渠县| 石狮市| 琼中| 安远县| 麟游县| 龙江县| 兰溪市| 延津县| 什邡市| 平凉市| 措勤县|