服务端代码:
View Code
1 #include <sys/un.h> 2 #include <unistd.h> 3 #include <iostream> 4 #include <sys/socket.h> 5 6 using std::cout; 7 const int MAX_DATA_LEN = 255; 8 9 int main(int argc, char** argv) 10 { 11 int server_sockfd = 0; 12 int client_sockfd = 0; 13 int server_len = 0; 14 int client_len = 0; 15 struct sockaddr_un server_addr; 16 struct sockaddr_un client_addr; 17 int result = 0; 18 19 20 unlink("server_socket"); 21 server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0); 22 server_addr.sun_family = AF_UNIX; 23 strncpy(server_addr.sun_path, "server_socket", sizeof(server_addr.sun_path)); 24 server_len = sizeof(server_addr); 25 26 bind(server_sockfd, (struct sockaddr*)&server_addr, server_len); 27 listen(server_sockfd, 5); 28 29 while(1) 30 { 31 char ch[MAX_DATA_LEN] = {0}; 32 cout << "server waiting" << std::endl; 33 client_len = sizeof(client_addr); 34 client_sockfd = accept(server_sockfd, (struct sockaddr*)&client_addr, (socklen_t*)&client_len); 35 36 read(client_sockfd, ch, MAX_DATA_LEN); 37 cout << "server receive is " << ch << std::endl; 38 strncpy(ch, "Hello, client!", MAX_DATA_LEN); 39 write(client_sockfd, ch, MAX_DATA_LEN); 40 close(client_sockfd); 41 } 42 43 return 0; 44 }
客户端代码:
View Code
1 #include <sys/un.h> 2 #include <unistd.h> 3 #include <iostream> 4 #include <sys/socket.h> 5 #include <cstdlib> 6 7 using namespace std; 8 9 const int MAX_DATA_LEN = 255; 10 11 int main(int argc, char** argv) 12 { 13 int sockfd = 0; 14 int len = 0; 15 struct sockaddr_un address; 16 int result = 0; 17 char ch[MAX_DATA_LEN] = "test"; 18 19 sockfd = socket(AF_UNIX, SOCK_STREAM, 0); 20 21 address.sun_family = AF_UNIX; 22 strncpy(address.sun_path, "server_socket", strlen("server_socket")); 23 len = sizeof(address); 24 25 result = connect(sockfd, (struct sockaddr*)&address, len); 26 if (-1 == result) 27 { 28 cerr << "connect failed" << std::endl; 29 exit(EXIT_FAILURE); 30 } 31 cout << "connect server secceed." << std::endl; 32 write(sockfd, ch, MAX_DATA_LEN); 33 read(sockfd, ch, MAX_DATA_LEN); 34 cout << "char from server is " << ch << std::endl; 35 close(sockfd); 36 exit(EXIT_SUCCESS); 37 }