`
memorymyann
  • 浏览: 271084 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

18.unix域协议

阅读更多

UNIX域协议并不是一个真正的协议族,它是用在同一台主机上进行客户服务器通信时,能够使用和不同主机上通信相同的API的一种方法。所以它只是用在同一台主机上2个进程间的通信,当然同一主机上2个进程通信的方式在unix下面有:信号,管道,共享内存。

 

unix域地址结构

struct sockaddr_un{

  uint8_t sun_len;

  sa_family_t sun_family;

  char sun_path[104];

 //与网络通信不同,网络中双方确认需要IP和端口号,而在同一台机器上的2个进程则不需要这么麻烦,如果写过管道通信的例子,则这里类似于管道,需要定义是一个用于通信的文件(不能是系统中已有的文件)

};

 

样例:

 

服务器

#include "/programe/net/head.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/select.h"
#include "sys/un.h"  //定义了unix域的头文件

int main(int argc, char ** argv) {
        int sockfd;
        socklen_t len;
        struct sockaddr_un addr;

        sockfd = socket(AF_LOCAL, SOCK_STREAM, 0);

//第一个参数为AF_LOCAL表示使用unix域协议,如果是SOCK_STREAM则后面相当类似于TCP,如果是DGRAM则类似于UDP协议
        bzero(&addr, sizeof(struct sockaddr_un));
        addr.sun_family = AF_LOCAL;

        strncpy(addr.sun_path, argv[1], sizeof(addr.sun_path) - 1);

//之前数据结构出有说明,这里是将输入参数的文件拷贝如addr.sun_path
        int flag = bind(sockfd, (struct sockaddr *)&addr, SUN_LEN(&addr));
        if(flag == -1) {
                printf("bind socket error\n");
                exit(1);
        }

        listen(sockfd, 10);
        int connfd = accept(sockfd, NULL, NULL);
        char buf[101];
        int n = read(connfd, buf, 100);
        buf[n] = '\0';
        printf("get message:%s\n", buf);
        close(connfd);
        close(sockfd);
}

 

客户端

#include "/programe/net/head.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/select.h"
#include "sys/un.h"

int main(int argc, char ** argv) {
        int sockfd;
        socklen_t len;
        struct sockaddr_un addr;

        sockfd = socket(AF_LOCAL, SOCK_STREAM, 0);
        bzero(&addr, sizeof(struct sockaddr_un));
        addr.sun_family = AF_LOCAL;
        strncpy(addr.sun_path, argv[1], sizeof(addr.sun_path) - 1);

        connect(sockfd, (struct sockaddr *)&addr, sizeof(struct sockaddr_un));
        char buf[] = "hello world";
        write(sockfd, buf, sizeof(buf));
        close(sockfd);
        exit(0);
}

 

与TCP运行不同,服务器和客户运行指令如下

server /programe/net/mytemp.tmp

client /programe/net/mytemp.tmp

很像管道通信,2个文件必须一致(一至才能互相通信),并且文件不会被删除。

分享到:
评论

相关推荐

    TCPIP详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议

    第一部分 TCP事务协议 第1章 T/TCP概述 第2章 T/TCP协议 第3章 T/TCP使用举例 …… 第二部分 TCP的其他应用 ...第18章 Unix域协议:I/O和描述符的传递 附录A 测量网络时间 附录B 编写T/TCP应用程序 参考文献

    TCPIP详解卷卷三:TCP事务协议HTTPNNTP和UNIX域协议pdf

    《TCP/IP详解卷三:TCP事务协议HTTPNNTP和UNIX域协议》是网络通信领域的一本经典著作,由Steven McQuaid和W. Richard Stevens共同撰写。这本书深入探讨了网络协议的核心概念,特别是TCP/IP协议栈中涉及事务处理、...

    TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议

    TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域...

    TCP-IP详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议.rar

    UNIX域协议,又称为本地套接字,是一种在相同主机上不同进程间通信的协议,类似于管道和消息队列,但提供了更丰富的功能和更高效的性能。UNIX域协议支持多种类型的数据交换,如流式、数据报和原始,且无需经过网络层...

    Java网络编程--Unix域协议:实现

    【Java网络编程--Unix域协议:实现】 Unix域协议,也称为本地域协议或套接字域协议,是用于在同一台计算机上不同进程间通信的一种高效机制。它提供了类似于TCP/IP套接字接口的API,但不涉及网络传输,因此速度更快...

    TCP-IP详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议(高清pdf文字版)

    《TCP-IP详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议》是一本深入探讨网络通信协议的专业书籍,旨在帮助读者理解并掌握TCP/IP协议栈中关键的事务处理、超文本传输协议(HTTP)、新闻网络传输协议(NNTP)以及UNIX...

    TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议.

    TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议./TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议./TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议./TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和...

    TCP/IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议

    《TCP/IP详解(卷3):TCP事务协议、HTTP、NNTP和UNIX域协议》同样采用了大量的实例和实现细节,并参考引用了卷2中的大量源程序。《TCP/IP详解(卷3):TCP事务协议、HTTP、NNTP和UNIX域协议》适用于希望理解TCP/IP如何...

    TCP-IP详解 卷3:TCP事务协议,HTTP,NNTP和UNIX域协议 完整

    4. UNIX域协议(UNIX Domain Sockets,UDS):这是在UNIX系统中实现的一种特殊类型的套接字,用于在同一台计算机上的进程间通信(IPC)。UNIX域协议不涉及网络传输,而是通过文件系统中的文件描述符进行通信,提供...

    TCP-IP详解卷3 -- tcp事务协议,http,nntp和unix域协议.pdf

    Unix域协议是Unix系统中一种本地进程间通信(IPC)的方式,允许在同一台机器上的进程之间高效地交换数据。这种协议提供了类似于TCP/IP的接口,但数据交换是在操作系统内部完成的,无需经过网络。 6. 测试网络与...

    Java网络编程--Unix域协议:概述

    【Java网络编程--Unix域协议:概述】 Unix域协议,又称本地域协议,是Unix和类Unix操作系统中一种特殊的进程间通信(IPC)机制。它允许在同一台主机上的进程之间高效地交换数据,同时提供了与网络通信类似的API接口...

    《TCP/IP详解 卷3:TCP事务协议、HTTP、NNTP、UNIX域协议》。

    第三卷的内容细节覆盖了当今TCP/IP编程人员和网络管理员必须熟练掌握... UNIX域协议,这是在UNIX实现中应用非常广泛的一套协议。 与前面两卷一样,本书有丰富的例子和实现的细节,他们都是4.4BSD-Lite中的网络代码。

    TCP-IP详解.卷三:TCP事务协议,HTTP,NNTP和UNIX域协议

    UNIX域协议支持两种类型:流式(SOCK_STREAM)和数据报(SOCK_DGRAM),分别对应TCP和UDP的特性。文件描述符是UNIX域通信的基础,进程间可以通过文件描述符共享数据。 这些协议在构建互联网基础设施中起着关键作用...

    TCP-IP详解.卷三:TCP事务协议,HTTP,NNTP和UNIX域协议.rar

    UNIX域协议,又称本地套接字,是Unix系统中进程间通信(IPC, Inter-Process Communication)的一种方式。它允许在同一台机器上的进程间直接交换数据,无需经过网络层。UNIX域协议提供了与TCP/IP套接字类似的功能,但...

    TCPIP协议详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议

    第一部分TCP事务协议 PDF完美版,目录大纲可跳转 第1章T/TCP 概述 1.1 概述 本章首先介绍客户-服务器事务概念。我们从使用U D P的客户-服务器应用开始,这是最 简单的情形。接着我们编写使用T C P的客户和服务器...

    TCPIP协议详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议

    UNIX域协议,这些协议提供了进程之间通信的一种手段。当客户与服务器进程在同一台主机上时,UNIX域协议通常要比TCP/IP快一倍。《TCP/IP详解·卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》同样采用了大量的实例和实现...

Global site tag (gtag.js) - Google Analytics