服务器端:
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>\n",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(&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: bzero(&peeraddr, peerlen);
48:
49: while(1)
50: {
51: recvfrom(listenfd, buffer, N, 0, (SA *)&peeraddr, &peerlen);
52:
53: printf("receive from client [%s]> %s",peeraddr.sun_path, buffer);
54: sendto(listenfd, buffer, N, 0, (SA *)&peeraddr, sizeof(peeraddr));
55: }
56:
57: return 0;
58: }
客户端:
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>\\n",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(&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 *)&myaddr, sizeof(myaddr)) < 0)
41: {
42: perror("fail to bind");
43: exit(-1);
44: }
45:
46:
47: bzero(&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 *)&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: }
运行:
服务器:
客户端: