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个文件必须一致(一至才能互相通信),并且文件不会被删除。
分享到:
相关推荐
第一部分 TCP事务协议 第1章 T/TCP概述 第2章 T/TCP协议 第3章 T/TCP使用举例 …… 第二部分 TCP的其他应用 ...第18章 Unix域协议:I/O和描述符的传递 附录A 测量网络时间 附录B 编写T/TCP应用程序 参考文献
《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域...
UNIX域协议,又称为本地套接字,是一种在相同主机上不同进程间通信的协议,类似于管道和消息队列,但提供了更丰富的功能和更高效的性能。UNIX域协议支持多种类型的数据交换,如流式、数据报和原始,且无需经过网络层...
【Java网络编程--Unix域协议:实现】 Unix域协议,也称为本地域协议或套接字域协议,是用于在同一台计算机上不同进程间通信的一种高效机制。它提供了类似于TCP/IP套接字接口的API,但不涉及网络传输,因此速度更快...
《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和...
《TCP/IP详解(卷3):TCP事务协议、HTTP、NNTP和UNIX域协议》同样采用了大量的实例和实现细节,并参考引用了卷2中的大量源程序。《TCP/IP详解(卷3):TCP事务协议、HTTP、NNTP和UNIX域协议》适用于希望理解TCP/IP如何...
4. UNIX域协议(UNIX Domain Sockets,UDS):这是在UNIX系统中实现的一种特殊类型的套接字,用于在同一台计算机上的进程间通信(IPC)。UNIX域协议不涉及网络传输,而是通过文件系统中的文件描述符进行通信,提供...
Unix域协议是Unix系统中一种本地进程间通信(IPC)的方式,允许在同一台机器上的进程之间高效地交换数据。这种协议提供了类似于TCP/IP的接口,但数据交换是在操作系统内部完成的,无需经过网络。 6. 测试网络与...
【Java网络编程--Unix域协议:概述】 Unix域协议,又称本地域协议,是Unix和类Unix操作系统中一种特殊的进程间通信(IPC)机制。它允许在同一台主机上的进程之间高效地交换数据,同时提供了与网络通信类似的API接口...
第三卷的内容细节覆盖了当今TCP/IP编程人员和网络管理员必须熟练掌握... UNIX域协议,这是在UNIX实现中应用非常广泛的一套协议。 与前面两卷一样,本书有丰富的例子和实现的细节,他们都是4.4BSD-Lite中的网络代码。
UNIX域协议支持两种类型:流式(SOCK_STREAM)和数据报(SOCK_DGRAM),分别对应TCP和UDP的特性。文件描述符是UNIX域通信的基础,进程间可以通过文件描述符共享数据。 这些协议在构建互联网基础设施中起着关键作用...
UNIX域协议,又称本地套接字,是Unix系统中进程间通信(IPC, Inter-Process Communication)的一种方式。它允许在同一台机器上的进程间直接交换数据,无需经过网络层。UNIX域协议提供了与TCP/IP套接字类似的功能,但...
第一部分TCP事务协议 PDF完美版,目录大纲可跳转 第1章T/TCP 概述 1.1 概述 本章首先介绍客户-服务器事务概念。我们从使用U D P的客户-服务器应用开始,这是最 简单的情形。接着我们编写使用T C P的客户和服务器...
UNIX域协议,这些协议提供了进程之间通信的一种手段。当客户与服务器进程在同一台主机上时,UNIX域协议通常要比TCP/IP快一倍。《TCP/IP详解·卷3:TCP事务协议、HTTP、NNTP和UNIX域协议》同样采用了大量的实例和实现...