socket domain 样例
来源:互联网 发布:matlab版本 mac 编辑:程序博客网 时间:2024/06/05 15:41
服务端
#include<stdio.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#define LISTEN_SOCKET "/tmp/liuyi.sock" //
#define LISTEN_BACKLOG 5
#define BIG_BUF 4096
int main()
{
int listenfd,connfd;
struct sockaddr_un un_s,un_c;
int len;
struct stat statbuf;
uid_t uid;
int ret;
char recvBuf[BIG_BUF];
char sendBuf[BIG_BUF];
listenfd=socket(AF_UNIX, SOCK_STREAM, 0);
if(listenfd<=0){
perror("socket create error");
exit(-1);
}
unlink(LISTEN_SOCKET);
memset(&un_s,0,sizeof(struct sockaddr_un));
un_s.sun_family = AF_UNIX;
strcpy(un_s.sun_path, LISTEN_SOCKET);
len = offsetof(struct sockaddr_un, sun_path) + strlen(LISTEN_SOCKET);
if(bind(listenfd,(struct sockaddr *)&un_s, len)<0){
perror("socket bind error");
exit(-1);
}
if(listen(listenfd,LISTEN_BACKLOG)<0){
perror("socket listen error");
exit(-1);
}
memset(&un_c,0,sizeof(struct sockaddr_un));
len=sizeof(struct sockaddr_un);
connfd=accept(listenfd,(struct sockaddr *)&un_c,&len);
if(connfd<=0){
perror("socket accept error");
exit(-1);
}
printf("connfd=[%d]\n",connfd);
len -= offsetof(struct sockaddr_un, sun_path);
un_c.sun_path[len] ='\0';
//取文件状态
if(stat(un_c.sun_path, &statbuf)<0){
perror("stat error");
exit(-1);
}
//判断是不是socket 文件 srwxr-xr-x 1 sandjmk liuyi.sock
if(S_ISSOCK(statbuf.st_mode) == 0){
perror("Is not a socket");
exit(-1);
}
printf("useid[%d]socket[%s]connect\n",statbuf.st_uid,un_c.sun_path);
unlink(un_c.sun_path);
memset(recvBuf,0,sizeof(recvBuf));
ret = read(connfd,recvBuf,sizeof(recvBuf));
printf("read ret[%d][%d]\n",ret,errno);
printf("recv:[%s]\n",recvBuf);
memset(sendBuf,'B',sizeof(sendBuf)-1);
ret = write(connfd,sendBuf,sizeof(sendBuf));
printf("write ret=[%d]\n",ret);
close(connfd);
return 0;
}
客户端
#include<stdio.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#define SOCKET_PATH "/tmp/"
#define LISTEN_SOCKET "/tmp/liuyi.sock"
#define BIG_BUF 4096
int main()
{
int connfd;
struct sockaddr_un un_s,un_c;
int len;
int ret;
char recvBuf[BIG_BUF];
char sendBuf[BIG_BUF];
connfd=socket(AF_UNIX, SOCK_STREAM, 0);
if(connfd<=0){
perror("socket create error");
exit(-1);
}
memset(&un_s,0,sizeof(struct sockaddr_un));
un_s.sun_family = AF_UNIX;
sprintf(un_s.sun_path, "%sliuyi.%05d",SOCKET_PATH,getpid());
len = offsetof(struct sockaddr_un, sun_path) + strlen(un_s.sun_path);
unlink(un_s.sun_path);
if(bind(connfd,(struct sockaddr *)&un_s, len)<0){
perror("socket bind error");
exit(-1);
}
memset(&un_s,0,sizeof(struct sockaddr_un));
un_s.sun_family = AF_UNIX;
sprintf(un_s.sun_path,LISTEN_SOCKET);
len = offsetof(struct sockaddr_un, sun_path) + strlen(un_s.sun_path);
if(connect(connfd,(struct sockaddr *)&un_s, len)<0){
perror("socket connect error");
exit(-1);
}
memset(sendBuf,'A',sizeof(sendBuf)-1);
ret = write(connfd,sendBuf,sizeof(sendBuf));
printf("write ret=[%d]\n",ret);
//sleep(1);
memset(recvBuf,0,sizeof(recvBuf));
ret = read(connfd,recvBuf,sizeof(recvBuf));
printf("read ret[%d][%d]\n",ret,errno);
printf("recv:[%s]\n",recvBuf);
return 0;
}
- socket domain 样例
- Domain Socket
- Domain Socket
- Unix domain socket
- UNIX Domain Socket IPC
- UNIX Domain Socket IPC
- Unix Domain Socket IPc
- UNIX Domain Socket IPC
- Linux Socket domain
- UNIX Domain Socket IPC
- unix domain socket
- unix domain socket介绍
- Unix domain socket
- UNIX Domain Socket IPC
- unix domain socket 本质
- UNIX Domain Socket IPC
- unix domain socket介绍
- UNIX Domain Socket IPC
- 企业网络似裸奔 信息防护现状不容乐观
- Android studio 安装中遇到一些问题的解决办法,分享一下
- Implementing NSFetchedResultsController for UICollectionView
- 常用的几个开发css的工具
- 工业液晶拼接屏
- socket domain 样例
- 多线程拆分bam文件
- SAP内向交货详解 Details on SAP inbound delivery
- [IOS 开发] Xcode LLDB Debug教程
- 三星led液晶拼接屏
- sys文件系统
- 使用AWS云服务构建高可用架构,实现云备份和云灾备
- android:inputType参数类型说明
- SVN之Cornerstone的高级使用