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 }

 

posted on 2015-03-02 17:42  子墨sky  阅读(222)  评论(0)    收藏  举报

导航