Add socket program sample code
 
	
	
	
	
	
	
	
	
	
	
	
	
	
| New file | 
 |  |  | 
 |  |  | #include <stdio.h> | 
 |  |  | #include <errno.h> | 
 |  |  | #include <string.h> | 
 |  |  | #include <unistd.h> | 
 |  |  | #include <sys/types.h>  | 
 |  |  | #include <sys/socket.h> | 
 |  |  | #include <arpa/inet.h> | 
 |  |  | #include <stdlib.h> | 
 |  |  | #include <getopt.h> | 
 |  |  |  | 
 |  |  | #define MSG_STR "Hello LingYun IoT Studio\n" | 
 |  |  |  | 
 |  |  | void print_usage(char *progname) | 
 |  |  | { | 
 |  |  |     printf("%s usage: \n", progname); | 
 |  |  |     printf("-i(--ipaddr): sepcify server IP address\n"); | 
 |  |  |     printf("-p(--port): sepcify server port.\n"); | 
 |  |  |     printf("-h(--Help): print this help information.\n"); | 
 |  |  |  | 
 |  |  |     return ; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | int main(int argc, char **argv) | 
 |  |  | { | 
 |  |  |     int                  sockfd = -1; | 
 |  |  |     int                  rv = -1; | 
 |  |  |     struct sockaddr_in   servaddr; | 
 |  |  |     char                *servip = NULL; | 
 |  |  |     int                  port = 0; | 
 |  |  |     char                 buf[1024]; | 
 |  |  |     int                  ch; | 
 |  |  |            struct option        opts[] = { | 
 |  |  |         {"ipaddr", required_argument, NULL, 'i'}, | 
 |  |  |         {"port", required_argument, NULL, 'p'}, | 
 |  |  |         {"help", no_argument, NULL, 'h'}, | 
 |  |  |         {NULL, 0, NULL, 0} | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     while( (ch=getopt_long(argc, argv, "i:p:h", opts, NULL)) != -1 )  | 
 |  |  |     { | 
 |  |  |         switch(ch) | 
 |  |  |         { | 
 |  |  |             case 'i': | 
 |  |  |                 servip=optarg; | 
 |  |  |                 break; | 
 |  |  |  | 
 |  |  |             case 'p': | 
 |  |  |                 port=atoi(optarg); | 
 |  |  |                 break; | 
 |  |  |  | 
 |  |  |             case 'h': | 
 |  |  |                 print_usage(argv[0]); | 
 |  |  |                 return 0; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     if( !servip || !port ) | 
 |  |  |     { | 
 |  |  |         print_usage(argv[0]); | 
 |  |  |         return 0; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     sockfd=socket(AF_INET, SOCK_STREAM, 0); | 
 |  |  |     if(sockfd < 0) | 
 |  |  |     { | 
 |  |  |         printf("Create socket failure: %s\n", strerror(errno)); | 
 |  |  |         return -1; | 
 |  |  |     } | 
 |  |  |     printf("Create socket[%d] successfully!\n", sockfd); | 
 |  |  |  | 
 |  |  |     memset(&servaddr, 0, sizeof(servaddr)); | 
 |  |  |     servaddr.sin_family=AF_INET; | 
 |  |  |     servaddr.sin_port = htons(port); | 
 |  |  |     inet_aton(servip, &servaddr.sin_addr); | 
 |  |  |     rv=connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); | 
 |  |  |     if(rv < 0) | 
 |  |  |     { | 
 |  |  |         printf("Connect to server[%s:%d] failure: %s\n",  | 
 |  |  |                 servip, port, strerror(errno)); | 
 |  |  |         return -2; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     printf("Connect to server[%s:%d] successfully!\n", servip, port); | 
 |  |  |  | 
 |  |  |     while(1) | 
 |  |  |     {  | 
 |  |  |         rv=write(sockfd, MSG_STR, strlen(MSG_STR)); | 
 |  |  |                if(rv < 0) | 
 |  |  |                { | 
 |  |  |                    printf("Write to server by sockfd[%d] failure: %s\n",  | 
 |  |  |                     sockfd, strerror(errno)); | 
 |  |  |             break; | 
 |  |  |                } | 
 |  |  |  | 
 |  |  |         memset(buf, 0, sizeof(buf)); | 
 |  |  |         rv=read(sockfd, buf, sizeof(buf)); | 
 |  |  |                if( rv < 0) | 
 |  |  |                { | 
 |  |  |                    printf("Read data from server by sockfd[%d] failure: %s\n",  | 
 |  |  |                     sockfd, strerror(errno)); | 
 |  |  |             break; | 
 |  |  |                } | 
 |  |  |                else if( rv == 0) | 
 |  |  |                {  | 
 |  |  |             printf("Socket[%d] get disconnected\n", sockfd); | 
 |  |  |             break; | 
 |  |  |         } | 
 |  |  |         else if( rv > 0 ) | 
 |  |  |         { | 
 |  |  |             printf("Read %d bytes data from Server: %s\n",  | 
 |  |  |                     rv, buf); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     close(sockfd); | 
 |  |  | } | 
 
| New file | 
 |  |  | 
 |  |  | #include <stdio.h> | 
 |  |  | #include <errno.h> | 
 |  |  | #include <string.h> | 
 |  |  | #include <unistd.h> | 
 |  |  | #include <sys/types.h>  | 
 |  |  | #include <sys/socket.h> | 
 |  |  | #include <arpa/inet.h> | 
 |  |  | #include <stdlib.h> | 
 |  |  | #include <getopt.h> | 
 |  |  |  | 
 |  |  | #define MSG_STR "Hello LingYun IoT Studio Client\n" | 
 |  |  |  | 
 |  |  | void print_usage(char *progname) | 
 |  |  | { | 
 |  |  |     printf("%s usage: \n", progname); | 
 |  |  |     printf("-p(--port): sepcify server listen port.\n"); | 
 |  |  |     printf("-h(--Help): print this help information.\n"); | 
 |  |  |  | 
 |  |  |     return ; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | int main(int argc, char **argv) | 
 |  |  | { | 
 |  |  |     int                  sockfd = -1; | 
 |  |  |     int                  rv = -1; | 
 |  |  |     struct sockaddr_in   servaddr; | 
 |  |  |     struct sockaddr_in   cliaddr; | 
 |  |  |     socklen_t            len; | 
 |  |  |     int                  port = 0; | 
 |  |  |     char                 buf[1024]; | 
 |  |  |     int                  clifd; | 
 |  |  |     int                  ch; | 
 |  |  |     int                  on = 1; | 
 |  |  |  | 
 |  |  |            struct option        opts[] = { | 
 |  |  |         {"port", required_argument, NULL, 'p'}, | 
 |  |  |         {"help", no_argument, NULL, 'h'}, | 
 |  |  |         {NULL, 0, NULL, 0} | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     while( (ch=getopt_long(argc, argv, "p:h", opts, NULL)) != -1 )  | 
 |  |  |     { | 
 |  |  |         switch(ch) | 
 |  |  |         { | 
 |  |  |             case 'p': | 
 |  |  |                 port=atoi(optarg); | 
 |  |  |                 break; | 
 |  |  |  | 
 |  |  |             case 'h': | 
 |  |  |                 print_usage(argv[0]); | 
 |  |  |                 return 0; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     if( !port ) | 
 |  |  |     { | 
 |  |  |         print_usage(argv[0]); | 
 |  |  |         return 0; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     sockfd=socket(AF_INET, SOCK_STREAM, 0); | 
 |  |  |     if(sockfd < 0) | 
 |  |  |     { | 
 |  |  |         printf("Create socket failure: %s\n", strerror(errno)); | 
 |  |  |         return -1; | 
 |  |  |     } | 
 |  |  |     printf("Create socket[%d] successfully!\n", sockfd); | 
 |  |  |  | 
 |  |  |     setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); | 
 |  |  |  | 
 |  |  |     memset(&servaddr, 0, sizeof(servaddr)); | 
 |  |  |     servaddr.sin_family=AF_INET; | 
 |  |  |     servaddr.sin_port = htons(port); | 
 |  |  |     servaddr.sin_addr.s_addr = htonl(INADDR_ANY); | 
 |  |  |     //inet_aton("192.168.0.16", &servaddr.sin_addr); | 
 |  |  |  | 
 |  |  |     rv=bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); | 
 |  |  |     if(rv < 0) | 
 |  |  |     { | 
 |  |  |         printf("Socket[%d] bind on port[%d] failure: %s\n",  | 
 |  |  |                 sockfd, port, strerror(errno)); | 
 |  |  |         return -2; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     listen(sockfd, 13); | 
 |  |  |     printf("Start to listen on port [%d]\n", port); | 
 |  |  |  | 
 |  |  |     while(1) | 
 |  |  |     {  | 
 |  |  |         printf("Start accept new client incoming...\n"); | 
 |  |  |  | 
 |  |  |         clifd=accept(sockfd, (struct sockaddr *)&cliaddr, &len); | 
 |  |  |         if(clifd < 0) | 
 |  |  |         { | 
 |  |  |             printf("Accept new client failure: %s\n", strerror(errno)); | 
 |  |  |             continue; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         printf("Accept new client[%s:%d] successfully\n",  | 
 |  |  |                 inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port)); | 
 |  |  |  | 
 |  |  |         memset(buf, 0, sizeof(buf)); | 
 |  |  |         rv=read(clifd, buf, sizeof(buf)); | 
 |  |  |                if( rv < 0) | 
 |  |  |                { | 
 |  |  |                    printf("Read data from client sockfd[%d] failure: %s\n",  | 
 |  |  |                     clifd, strerror(errno)); | 
 |  |  |             close(clifd); | 
 |  |  |             continue; | 
 |  |  |                } | 
 |  |  |                else if( rv == 0) | 
 |  |  |                {  | 
 |  |  |             printf("Socket[%d] get disconnected\n", clifd); | 
 |  |  |             close(clifd); | 
 |  |  |             continue; | 
 |  |  |         } | 
 |  |  |         else if( rv > 0 ) | 
 |  |  |         { | 
 |  |  |             printf("Read %d bytes data from Server: %s\n",  | 
 |  |  |                     rv, buf); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         rv=write(clifd, MSG_STR, strlen(MSG_STR)); | 
 |  |  |                if(rv < 0) | 
 |  |  |                { | 
 |  |  |                    printf("Write to client by sockfd[%d] failure: %s\n",  | 
 |  |  |                     sockfd, strerror(errno)); | 
 |  |  |             close(clifd); | 
 |  |  |             continue; | 
 |  |  |                } | 
 |  |  |  | 
 |  |  |         printf("Close client socket[%d]\n", clifd); | 
 |  |  |         close(clifd); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     close(sockfd); | 
 |  |  | } |