UNIX域流式套接字一例
客户端:
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;
20: char buffer[N];
21: 22: if(argc < 2)
23: {24: printf("usage:%s <sock file>\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 <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, 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 <sock file>\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: }
运行:
服务器:
客户端:
本文来自博客园,作者:dolinux,未经同意,禁止转载



浙公网安备 33010602011771号