Service-Terminal:
1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <strings.h>
4: #include <sys/un.h>
5: #include <string.h>
6: #include <sys/socket.h>
7: #include <netinet/in.h>
8: #include <arpa/inet.h>
9: #include <unistd.h>
10:
11: typedef struct sockaddr SA;
12:
13: #define N 256
14:
15: int main(int argc, char *argv[])
16: {<!-- -->
17:
18: int listenfd;
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 <sock file>\\ ",argv[0]);
26: exit(-1);
27: }
28:
29: if((listenfd = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0)
30: {<!-- -->
31: perror("fail to socket");
32: exit(-1);
33: }
34:
35: bzero( & amp;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 *) & amp;myaddr, sizeof(myaddr)) < 0)
42: {<!-- -->
43: perror("fail to bind");
44: exit(-1);
45: }
46:
47: bzero( & amp;peeraddr, peerlen);
48:
49: while(1)
50: {<!-- -->
51: recvfrom(listenfd, buffer, N, 0, (SA *) & amp;peeraddr, & amp;peerlen);
52:
53: printf("receive from client [%s]> %s",peeraddr.sun_path, buffer);
54: sendto(listenfd, buffer, N, 0, (SA *) & amp;peeraddr, sizeof(peeraddr));
55: }
56:
57: return 0;
58: }
Client:
1: #include <string.h>
2: #include <stdio.h>
3: #include <stdlib.h>
4: #include <strings.h>
5: #include <sys/un.h>
6: #include <sys/socket.h>
7: #include <netinet/in.h>
8: #include <arpa/inet.h>
9: #include <unistd.h>
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,serveraddr;
20: char buffer[N];
21:
22: if(argc < 3)
23: {<!-- -->
24: printf("usage:%s <server sock> <client sock>\\ ",argv[0]);
25: exit(-1);
26: }
27:
28: if((sockfd = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0)
29: {<!-- -->
30: perror("fail to socket");
31: exit(-1);
32: }
33:
34: bzero( & amp;myaddr, sizeof(struct sockaddr_un));
35:
36: myaddr.sun_family = PF_UNIX;
37: strcpy(myaddr.sun_path, argv[2]);
38:
39: unlink(argv[2]);
40: if(bind(sockfd, (SA *) & amp;myaddr, sizeof(myaddr)) < 0)
41: {<!-- -->
42: perror("fail to bind");
43: exit(-1);
44: }
45:
46:
47: bzero( & amp;serveraddr, sizeof(struct sockaddr_un));
48:
49: serveraddr.sun_family = PF_UNIX;
50: strcpy(serveraddr.sun_path, argv[1]);
51:
52: while(1)
53: {<!-- -->
54:
55: fgets(buffer, N ,stdin);
56: if(strncmp(buffer, "quit", 4) == 0)
57: {<!-- -->
58: break;
59: }
60:
61: sendto(sockfd, buffer, N, 0, (SA *) & amp;serveraddr, sizeof(serveraddr));
62: bzero(buffer, N);
63: recvfrom(sockfd, buffer, N, 0, NULL, NULL);
64:
65: printf("receive from server: %s", buffer);
66: }
67:
68: close(sockfd);
69: return 0;
70: }
Run:
Server:
Client: