linux socket的一个c/s模型例子
客户端端代码:
1 /************************************************************************* 2 > File Name: clt.c 3 > Created Time: Mon 02 Mar 2015 03:02:47 PM CST 4 ************************************************************************/ 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <errno.h> 8 #include <string.h> 9 #include <sys/types.h> 10 #include <sys/socket.h> 11 #include <netinet/in.h> 12 13 int main (int argv, char** argc) 14 { 15 int sk_fd; 16 if ((sk_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) 17 { 18 fprintf(stdout, "socket initialized error: %s", strerror(errno)); 19 return -1; 20 } 21 22 struct sockaddr_in addr; 23 memset(&addr, 0, sizeof(addr)); 24 25 addr.sin_family = AF_INET; 26 addr.sin_port = htons(8080); 27 addr.sin_addr.s_addr = inet_addr("127.0.0.1"); 28 29 if ((connect(sk_fd, (struct sockaddr*)&addr, sizeof(addr))) == -1) 30 { 31 fprintf(stdout, "connect failure: %s", strerror(errno)); 32 return -1; 33 } 34 35 char s[1024]; 36 memset(s, 0, sizeof(1024)); 37 strcpy(s, "hello world"); 38 39 if ((send(sk_fd, s, strlen(s), 0)) == -1) 40 { 41 fprintf(stdout, "send error: %s", strerror(errno)); 42 return -1; 43 } 44 45 close(sk_fd); 46 return 0; 47 }
服务器端代码:
1 /************************************************************************* 2 > File Name: serv.c 3 > Created Time: Mon 02 Mar 2015 04:07:26 PM CST 4 ************************************************************************/ 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <string.h> 8 #include <errno.h> 9 #include <sys/types.h> 10 #include <sys/socket.h> 11 #include <netinet/in.h> 12 13 int main (int argv, char** argc) 14 { 15 int sk_fd; 16 if ((sk_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) 17 { 18 fprintf(stderr, "socket initialize error: %s", strerror(errno)); 19 return -1; 20 } 21 22 int on = 1; 23 if (setsockopt(sk_fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) 24 { 25 fprintf(stderr, "setsockopt error: %s\n", strerror(errno)); 26 return -1; 27 } 28 29 struct sockaddr_in addr; //define a socket address 30 memset(&addr, 0, sizeof(addr)); 31 addr.sin_family = AF_INET; 32 addr.sin_port = htons(8080); 33 addr.sin_addr.s_addr = htonl(INADDR_ANY); 34 35 if (bind(sk_fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) 36 { 37 fprintf(stderr, "bind error: %s\n", strerror(errno)); 38 return -1; 39 } 40 41 if (listen(sk_fd, 10) == -1) 42 { 43 fprintf(stderr, "listen error: %s\n", strerror(errno)); 44 return -1; 45 } 46 47 char s[1024]; 48 struct sockaddr_in clt_addr; 49 50 int clt_fd; 51 for (;;) 52 { 53 memset(s, 0, sizeof(1024)); 54 memset(&clt_addr, 0, sizeof(clt_addr)); 55 56 socklen_t len = sizeof(clt_addr); 57 if ((clt_fd = accept(sk_fd, (struct sockaddr*)&clt_addr, &len)) == -1) 58 { 59 fprintf(stderr, "accept error: %s\n", strerror(errno)); 60 return -1; 61 } 62 63 if (recv(clt_fd, s, sizeof(s), 0) == -1) 64 { 65 fprintf(stderr, "recv error: %s\n", strerror(errno)); 66 close(clt_fd); 67 return -1; 68 } 69 70 fprintf(stdout, "%s\n", s); 71 close(clt_fd); 72 } 73 close(sk_fd); 74 return 0; 75 }