Linux Socket编程实例(一个Hello World程序)

来源:互联网 发布:mac隐藏桌面的文件夹 编辑:程序博客网 时间:2024/06/07 06:36
/* * * Tcp Server program, It is a simple example only. * zhengsh 200520602061 2 * when client connect to server, send a welcome message and timestamp in server.  */ #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 ;}


/*  Tcp client program, It is a simple example only. * zhengsh 200520602061 2 * connect to server, and echo a message from server.*/ #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;} 


出处:http://www.cppblog.com/tx7do/articles/5966.html

原创粉丝点击