#include <stdlib.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#define N 64
int main(int argc, char *argv[])
{
int listenfd, connfd, nbyte;
socklen_t addr_len;
char buf[N];
struct sockaddr_un myaddr, peeraddr;
{
printf("input format is: %s <socket_file>", argv[0]);
exit(1);
}
if ((listenfd = socket(PF_UNIX, SOCK_STREAM, 0)) == -1)
{
perror("socket fail");
exit(1);
}
// int bind(int sockfd, const struct sockaddr *addr,
// socklen_t addrlen);
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = PF_UNIX;
strcpy(myaddr.sun_path, argv[1]);
{
perror("bind fail");
exit(1);
}
if (listen(listenfd, 5) == -1)
{
perror("listen fail");
exit(1);
}
addr_len = sizeof(peeraddr);
if ((connfd = accept(listenfd, (SA *)&peeraddr, &addr_len)) == -1)
{
perror("accept fail");
exit(1);
}
//printf("the client is %s:%d\n", inet_ntoa(peeraddr.sin_addr), ntohs(cli_addr.sin_port));
{
perror("read fail\n");
exit(1);
}
printf("recv from %s : %s", peeraddr.sun_path, buf);
close(connfd);
return 0;
}
客户端代码:
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/un.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#define N 64
#define SA struct sockaddr
int main(int argc, char *argv[])
{
int connfd;
char buf[N];
struct sockaddr_un ser_addr;
if (argc < 2)
{
printf("input format is:%s <server_socket_file>\n", argv[0]);
exit(1);
}
//int connect(int sockfd, const struct sockaddr *serv_addr,
// socklen_t addrlen);
bzero(&ser_addr, sizeof(ser_addr));
ser_addr.sun_family = PF_UNIX;
strcpy(ser_addr.sun_path, argv[1]);
if ((connfd = socket(PF_UNIX, SOCK_STREAM, 0)) == -1)
{
perror("socket fail\n");
exit(1);
}
if (connect(connfd, (SA *)&ser_addr, sizeof(ser_addr)) == -1)
{
perror("connect fail");
exit(1);
}
strcpy(buf, "this is unix stream socket\n");
send(connfd, buf, N, 0);
return 0;
}