UNIX域用户数据报套接字一例
服务器端:
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: }
运行:
服务器:
客户端:
本文来自博客园,作者:dolinux,未经同意,禁止转载



浙公网安备 33010602011771号