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); |
| | | } |