客户端:
1: #include
2: #include
3: #include
4: #include
5: #include
6: #include
7: #include
8: #include
9: #include
10:
11: typedef struct sockaddr SA;
12:
13: #define N 256
14:
15: int main(int argc, char *argv[])
16: {
17:
18: int sockfd;
19: struct sockaddr_un myaddr;
20: char buffer[N];
21:
22: if(argc < 2)
23: {
24: printf("usage:%s\n",argv[0]);
25: exit(-1);
26: }
27:
28: if((sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
29: {
30: perror("fail to socket");
31: exit(-1);
32: }
33:
34: bzero(&myaddr, sizeof(struct sockaddr_un));
35:
36: myaddr.sun_family = PF_UNIX;
37: strcpy(myaddr.sun_path, argv[1]);
38:
39: if(connect(sockfd, (SA *)&myaddr, sizeof(myaddr)) < 0)
40: {
41: perror("fail to connect");
42: exit(-1);
43: }
44:
45:
46: while(1)
47: {
48:
49: fgets(buffer, N ,stdin);
50: if(strncmp(buffer, "quit", 4) == 0)
51: {
52: break;
53: }
54:
55: send(sockfd, buffer, N, 0);
56: bzero(buffer, N);
57: recv(sockfd, buffer, N, 0);
58:
59: printf("receive from server: %s", buffer);
60: }
61:
62: close(sockfd);
63: return 0;
64: }
服务器端:
1: #include
2: #include
3: #include
4: #include
5: #include
6: #include
7: #include
8: #include
9: #include
10:
11: typedef struct sockaddr SA;
12:
13: #define N 256
14:
15: int main(int argc, char *argv[])
16: {
17:
18: int listenfd, confd;
19: struct sockaddr_un myaddr, peeraddr;
20: socklen_t peerlen = sizeof(peeraddr);
21: char buffer[N];
22:
23: if(argc < 2)
24: {
25: printf("usage:%s\n",argv[0]);
26: exit(-1);
27: }
28:
29: if((listenfd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
30: {
31: perror("fail to socket");
32: exit(-1);
33: }
34:
35: bzero(&myaddr, sizeof(struct sockaddr_un));
36:
37: myaddr.sun_family = PF_UNIX;
38: strcpy(myaddr.sun_path, argv[1]);
39:
40: remove(argv[1]);
41: if(bind(listenfd, (SA *)&myaddr, sizeof(myaddr)) < 0)
42: {
43: perror("fail to bind");
44: exit(-1);
45: }
46:
47: if(listen(listenfd, 5) < 0)
48: {
49: perror("fail to listen");
50: exit(-1);
51: }
52:
53: bzero(&peeraddr, peerlen);
54:
55: while(1)
56: {
57: if((confd = accept(listenfd, (SA *)&peeraddr, &peerlen)) < 0)
58: {
59: perror("fail to accept");
60: exit(-1);
61: }
62:
63: printf("connetion from [%s]\n",peeraddr.sun_path);
64:
65: while(recv(confd, buffer, N, 0) > 0)
66: {
67: printf("receive from client > %s", buffer);
68:
69: send(confd, buffer, N, 0);
70: }
71:
72: printf("connetion has closed\n");
73:
74: close(confd);
75:
76: }
77:
78: return 0;
79: }
运行:
服务器:
客户端: