程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Linux下C編程:socket實例

Linux下C編程:socket實例

編輯:關於C語言

客戶端:

#include <stdio.h>     
#include <sys/socket.h>     
#include <unistd.h>     
#include <sys/types.h>     
#include <netinet/in.h>     
#include <stdlib.h>      

#define  SERVER_PORT 20000  //  define the defualt connect port id      
#define  CLIENT_PORT ((20001+rand())%65536)  //  define the defualt client port as a random port      
#define  BUFFER_SIZE 255      
#define  REUQEST_MESSAGE "welcome to connect the server.\n"      
         
         
void  usage(char* name)     
{     
       printf( " usage: %s IpAddr\n " ,name);     
}     
         
         
int  main(int argc, char** argv)     
{     
       int  servfd,clifd,length = 0;     
       struct  sockaddr_in servaddr,cliaddr;     
       socklen_t socklen  =   sizeof (servaddr);     
       char  buf[BUFFER_SIZE];     
         
        if (argc < 2 )     
         {     
              usage(argv[ 0 ]);     
              exit( 1 );     
       }      
         
       if ((clifd  =  socket(AF_INET,SOCK_STREAM, 0 ))  <   0 )     
         {     
             printf( " create socket error!\n " );     
             exit( 1 );     
       }      
          
       srand(time(NULL)); // initialize random generator      
          
       bzero( & cliaddr, sizeof (cliaddr));     
       cliaddr.sin_family  =  AF_INET;     
       cliaddr.sin_port  =  htons(CLIENT_PORT);     
       cliaddr.sin_addr.s_addr  =  htons(INADDR_ANY);     
         
       bzero( & servaddr, sizeof (servaddr));     
       servaddr.sin_family  =  AF_INET;     
       inet_aton(argv[ 1 ], & servaddr.sin_addr);     
       servaddr.sin_port  =  htons(SERVER_PORT);     
      // servaddr.sin_addr.s_addr = htons(INADDR_ANY);      
         
       if  (bind(clifd, (struct sockaddr* ) &cliaddr, sizeof (cliaddr)) < 0 )     
       {     
              printf( " bind to port %d failure!\n " ,CLIENT_PORT);     
              exit( 1 );     
       }      
         
        if (connect(clifd,( struct  sockaddr * ) & servaddr, socklen)  <   0 )     
       {     
              printf( " can't connect to %s!\n ", argv[ 1 ]);     
              exit( 1 );     
       }      
         
       length  =  recv(clifd, buf, BUFFER_SIZE, 0);     
        if  (length < 0)     
        {     
              printf( " error comes when recieve data from server %s! ", argv[1] );     
              exit( 1 );     
       }      
         
       printf( " from server %s :\n\t%s", argv[1], buf);     
         
       close(clifd);     
       return 0;     
}

服務器端:

#include  <stdio.h>      
#include  <sys/socket.h>      
#include  <unistd.h>      
#include  <sys/types.h>      
#include  <netinet/in.h>      
#include  <stdlib.h>      
#include  <time.h>      
          
#define  SERVER_PORT 20000  //  define the defualt connect port id      
#define  LENGTH_OF_LISTEN_QUEUE 10  // length of listen queue in server      
#define  BUFFER_SIZE 255      
#define  WELCOME_MESSAGE "welcome to connect the server. "      
         
int main(int argc, char** argv)     
{     
       int  servfd,clifd;     
       struct  sockaddr_in servaddr,cliaddr;     
         
       if  ((servfd  =  socket(AF_INET,SOCK_STREAM, 0 ))  <   0 )     
         {     
              printf( " create socket error!\n " );     
              exit( 1 );     
       }      
          
       bzero( & servaddr, sizeof (servaddr));     
         
       servaddr.sin_family  =  AF_INET;     
       servaddr.sin_port  =  htons(SERVER_PORT);     
       servaddr.sin_addr.s_addr  =  htons(INADDR_ANY);     
         
       if  (bind(servfd,( struct  sockaddr * ) & servaddr, sizeof (servaddr)) < 0 )     
         {     
              printf( " bind to port %d failure!\n " ,SERVER_PORT);     
              exit( 1 );     
       }      
          
        if  (listen(servfd,LENGTH_OF_LISTEN_QUEUE)  <   0 )     
         {     
              printf( " call listen failure!\n " );     
              exit( 1 );     
       }
          
        while  ( 1 )     
         { // server loop will nerver exit unless any body kill the process      
         
              char  buf[BUFFER_SIZE];     
              long  timestamp;     
              socklen_t length  =   sizeof (cliaddr);     
              clifd  =  accept(servfd,( struct  sockaddr * ) & cliaddr, & length);     
         
               if  (clifd  <   0 ) 
                { 
                     printf( " error comes when call accept!\n " ); 
                     break ;
              }

              strcpy(buf,WELCOME_MESSAGE);

               // inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);

              printf( " from client,IP:%s,Port:%d\n " ,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));

              timestamp  =  time(NULL);

              strcat(buf, " timestamp in server: " ); 
              strcat(buf,ctime( & timestamp));

              send(clifd,buf,BUFFER_SIZE, 0 ); 

              close(clifd);                

       } // exit      

       close(servfd);     

        return   0 ;     
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved