标签:domain data1 share unix client docker root
unix server
root@ubuntu:~/docker# docker run -it --name debian -v /data1/unix_domain:/data1/unix_domain debian root@b1a3bef38722:/# ls bin boot data1 dev etc home lib media mnt opt proc root run sbin server srv sys tmp usr var
unix client
root@ubuntu:~/docker# docker run -it --name debian2 -v /data1/unix_domain:/data1/unix_domain debian root@d92cea9a459c:/# ls bin boot client data1 dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
docker cp server 和client
root@ubuntu:~/docker/unix-domain-socket-example# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b1a3bef38722 debian "bash" 23 seconds ago Up 22 seconds debian 176fb79cdcef nginx:1.17.4 "nginx -g 'daemon of…" 3 weeks ago Up 3 weeks 80/tcp test-vm root@ubuntu:~/docker/unix-domain-socket-example# docker cp bin/server debian:/ root@ubuntu:~/docker/unix-domain-socket-example# docker cp bin/client debian2:/ root@ubuntu:~/docker/unix-domain-socket-example# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d92cea9a459c debian "bash" 2 minutes ago Up 2 minutes debian2 b1a3bef38722 debian "bash" 4 minutes ago Up 4 minutes debian 176fb79cdcef nginx:1.17.4 "nginx -g 'daemon of…" 3 weeks ago Up 3 weeks 80/tcp test-vm root@ubuntu:~/docker/unix-domain-socket-example#
run server
root@b1a3bef38722:/# ./server recvfrom: iccExchangeAPDU
root@ubuntu:~/docker/unix-domain-socket-example# docker exec -it debian bash root@b1a3bef38722:/# ls /data1/unix_domain/ server.sock root@b1a3bef38722:/#
run client
root@d92cea9a459c:/# ./client sent iccExchangeAPDU receive 15 transmit good! root@d92cea9a459c:/#
宿主机上
root@ubuntu:~/docker/unix-domain-socket-example# ls /data1/unix_domain/ server.sock root@ubuntu:~/docker/unix-domain-socket-example# docker exec -it debian bash root@b1a3bef38722:/# ls /data1/unix_domain/ server.sock root@b1a3bef38722:/#
一对多
server
root@ubuntu:~/docker# docker run -it --name debian_s -v /data1/unix_domain:/data1/unix_domain debian root@c66e0ec0c311:/# ./server recvfrom: iccExchangeAPDU recvfrom: iccExchangeAPDU
root@ubuntu:~/docker# docker run -it --name debian_s -v /data1/unix_domain:/data1/unix_domain debian root@c66e0ec0c311:/# ./server recvfrom: iccExchangeAPDU recvfrom: iccExchangeAPDU recvfrom: /data1/unix_domain/client.sockclient2 recvfrom: /data1/unix_domain/client.sockclient3 recvfrom: /data1/unix_domain/client.sockclient2 recvfrom: /data1/unix_domain/client.sockclient3
client1
root@ubuntu:~/docker# docker run -it --name debian2 -v /data1/unix_domain:/data1/unix_domain debian root@7369904e52f4:/# ls bin boot client data1 dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var root@7369904e52f4:/# ./client client2 sent iccExchangeAPDU receive 15 transmit good!
root@7369904e52f4:/# ./client client2 sent /data1/unix_domain/client.sockclient2 receive 15 transmit good!
client2
root@ubuntu:~# docker run -it --name debian3 -v /data1/unix_domain:/data1/unix_domain debian root@6373fc51aeae:/# ./client client3 sent iccExchangeAPDU receive 15 transmit good!
root@6373fc51aeae:/# ./client client3 sent /data1/unix_domain/client.sockclient3 receive 15 transmit good!
查看套接字
root@ubuntu:~# ls /data1/unix_domain/ root@ubuntu:~# ls /data1/unix_domain/ client.sockclient2 client.sockclient3 server.sock root@ubuntu:~#
client 代码
unix-domain-socket-example
#include <stdio.h> #include <sys/socket.h> #include <sys/un.h> #include "ipc.h" int main(int argc, char *argv[]) { int fd; struct sockaddr_un addr; int ret; char buff[8192]; struct sockaddr_un from; int ok = 1; int len; char buffer[128]; if ((fd = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0) { perror("socket"); ok = 0; } if (ok) { memset(&addr, 0, sizeof(addr)); snprintf(buffer,sizeof(buffer)-1,"%s%s",CLIENT_SOCK_FILE,argv[1]); addr.sun_family = AF_UNIX; strcpy(addr.sun_path, buffer); unlink(buffer); if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind"); ok = 0; } } if (ok) { memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; strcpy(addr.sun_path, SERVER_SOCK_FILE); if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) { perror("connect"); ok = 0; } } if (ok) { //strcpy (buff, "iccExchangeAPDU"); if (send(fd, buffer, strlen(buffer)+1, 0) == -1) { perror("send"); ok = 0; } printf ("sent %s\n", buffer); } if (ok) { if ((len = recv(fd, buff, 8192, 0)) < 0) { perror("recv"); ok = 0; } printf ("receive %d %s\n", len, buff); } if (fd >= 0) { close(fd); } getchar(); unlink (buffer); return 0; }
标签:domain,data1,share,unix,client,docker,root 来源: https://www.cnblogs.com/dream397/p/15079844.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。