1. #define UNIX_PATH_MAX 108
  2.  
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <sys/un.h>
  6.  
  7. #include <stdio.h>
  8.  
  9. #define BUFSIZE 32
  10.  
  11. int main(void)
  12. {
  13. int sd;
  14. char buf[BUFSIZE];
  15. struct sockaddr_un hisend;
  16. int ret;
  17.  
  18. sd = socket(PF_LOCAL, SOCK_DGRAM, 0);
  19. if (sd == -1) {
  20. perror("socket()");
  21. goto socket_err;
  22. }
  23.  
  24. hisend.sun_family = AF_UNIX;
  25. snprintf(hisend.sun_path, UNIX_PATH_MAX, "rcv_sock");
  26.  
  27. ret = connect(sd, (struct sockaddr *)&hisend, sizeof(hisend));
  28. if (ret == -1) {
  29. perror("connect()");
  30. goto connect_err;
  31. }
  32.  
  33. while (1) {
  34. ret = read(0, buf, BUFSIZE);
  35. /* if error */
  36. if (ret == 0) {
  37. break;
  38. }
  39.  
  40. write(sd, buf, ret);
  41. ret = read(sd, buf, BUFSIZE);
  42. if (ret == -1) {
  43. perror("read(sd)");
  44. break;
  45. }
  46. write(1, buf, ret);
  47. }
  48.  
  49. close(sd);
  50.  
  51. return 0;
  52.  
  53. accept_err:
  54. connect_err:
  55. close(sd);
  56. socket_err:
  57. return 1;
  58. }
  1. #define UNIX_PATH_MAX 108
  2.  
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <sys/un.h>
  6.  
  7. #include <stdio.h>
  8.  
  9. #define BUFSIZE 32
  10.  
  11. int main(void)
  12. {
  13. int sd;
  14. char buf[BUFSIZE];
  15. struct sockaddr_un myend, hisend;
  16. socklen_t hislen;
  17. int ret;
  18.  
  19. sd = socket(PF_LOCAL, SOCK_DGRAM, 0);
  20. if (sd == -1) {
  21. perror("socket()");
  22. goto socket_err;
  23. }
  24.  
  25. myend.sun_family = AF_UNIX;
  26. snprintf(myend.sun_path, UNIX_PATH_MAX, "rcv_sock");
  27.  
  28. unlink(myend.sun_path);
  29. ret = bind(sd, (struct sockaddr *)&myend, sizeof(myend));
  30. if (ret == -1) {
  31. perror("bind()");
  32. goto bind_err;
  33. }
  34.  
  35. hislen = sizeof(hisend);
  36. while (1) {
  37. ret = recvfrom(sd, buf, BUFSIZE, 0, (struct sockaddr *)&hisend, &hislen);
  38. /* if error */
  39. if (ret == 0) {
  40. break;
  41. }
  42.  
  43. write(1, buf, ret);
  44. ret = sendto(sd, "xxxxx\n", 6, 0, (struct sockaddr *)&hisend, hislen);
  45. if (ret == -1) {
  46. perror("write(sd)");
  47. break;
  48. }
  49. }
  50.  
  51. close(sd);
  52.  
  53. return 0;
  54.  
  55. bind_err:
  56. close(sd);
  57. socket_err:
  58. return 1;
  59. }

UNIX域套接字——UNIX domain socket(DGRAM)的更多相关文章

  1. UNIX 域套接字——UNIX domain socket

    /*********************程序相关信息********************* * 程序编号:015 * 程序编写起始日期:2013.11.30 * 程序编写完成日期:2013.1 ...

  2. Unix域套接字(Unix Domain Socket)介绍【转】

    本文转载自:http://blog.csdn.net/roland_sun/article/details/50266565 版权声明:本文为博主原创文章,未经博主允许不得转载. 在Linux系统中, ...

  3. 《网络编程》Unix 域套接字

    概述 Unix 域套接字是一种client和server在单主机上的 IPC 方法.Unix 域套接字不运行协议处理,不须要加入或删除网络报头,无需验证和,不产生顺序号,无需发送确认报文,比因特网域套 ...

  4. Unix域套接字简介

    在Linux系统中,有很多进程间通信方式,套接字(Socket)就是其中的一种.但传统的套接字的用法都是基于TCP/IP协议栈的,需要指定IP地址.如果不同主机上的两个进程进行通信,当然这样做没什么问 ...

  5. UNIX域套接字(unix domain)

    UNIX域套接字用于在同一台机器上运行的进程之间的通信. UNIX域套接字提供流和数据报两种接口. 说明:UNIX域套接字比因特网套接字效率更高.它仅赋值数据:不进行协议处理,如添加或删除网络报头.计 ...

  6. 高级进程间通信之UNIX域套接字

    UNIX域套接字用于在同一台机器上运行的进程之间的通信.虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高.UNIX域套接字仅仅复制数据:它们并不执行协议处理,不需要添加或删除网络报头,无 ...

  7. UNIX网络编程——UNIX域套接字编程和socketpair 函数

    一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...

  8. UNIX域套接字编程和socketpair 函数

    一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...

  9. unix进程间通信方式(下)-unix域套接字(转)

    在之前的博客中已经总结了其它7种进程间的通信方式.unix域套接字用于在同一台计算机上的进程间通信,虽然因特网域套接字可用于同一目的,但是unix域套接字的效率更高.unix域套接字并不进行协议处理, ...

随机推荐

  1. 阿里云修改CentOS Linux服务器的主机名

    阿里云主机的默认主机名是为AY开头的随机名称,如何修改为易于区分的友好名称呢?请看下面的操作步骤: 1. vi /etc/hosts i键,修改主机名,esc键,:wq键保存退出 2. vi /etc ...

  2. kafka和springboot整合应用

    加载依赖 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>s ...

  3. 关于socket知识整理

    一个完整的计算机系统是由硬件.操作系统.应用软件三者组成,具备了这三个条件,一台计算机系统就可以玩单机游戏.如果你想上网(访问个黄色网站,发个黄色微博啥的),就需要遵守网络协议,即计算机之间交流的标准 ...

  4. opencv 掩膜操作 滤波 卷积核定义 增强对比度 掩膜运算

    /* 矩阵的掩膜操作 0 掩膜mask 在这里进行增强对比度: [ [ 0,-1, 0 ], [-1, 5, -1], [ 0,-1, 0 ] ] 使用mask滑动图片每一个位置,进行卷积运算 这里这 ...

  5. C# NPOCO 轻量级ORM框架(入门)

    目前公司使用这个框架,搜不到很详细的中文资料. 只有英文wiki,所以翻译学习一下. 因为博主也是低水平的,可能会有一些理解不到位的地方. 可能会有错误的地方,如果有园友发现可以指出. wiki地址: ...

  6. 如何破解安卓App

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha  313134555@qq.com 如何破解安卓App

  7. MyBatis之MyBatis环境搭建

    MyBatis之MyBatis环境搭建 一.MyBatis开发环境搭建 1.引入Jar包 ①MyBatis mybatis-3.4.1.jar ant-1.9.6.jar ant-launcher-1 ...

  8. [LOJ#2980][THUSCH2017]大魔法师(线段树+矩阵)

    每个线段树维护一个行向量[A,B,C,len]分别是这个区间的A,B,C区间和与区间长度,转移显然. 以及此题卡常,稍微哪里写丑了就能100->45. #include<cstdio> ...

  9. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) A. Bear and Game 水题

    A. Bear and Game 题目连接: http://www.codeforces.com/contest/673/problem/A Description Bear Limak likes ...

  10. 彻底解决每次打开visio都提示windows正在配置visio的问题

    出现这个提示windows正在配置XXX软件的问题,是由于在安装一个新的版本时,之前那个版本的office没有完全卸载,注册表内有残留. 最简单的方式,并不是 把HKEY_CURRENT_USER\S ...