天天看点

管道、邮槽和Socket的比较

消息管道(Message Pipe)

用于设置应用程序间的一条永久通讯通道,通过该通道可以象自己的应用程序访问一个平面文件一样读写数据。

匿名管道(Anonymous Pipes)

单向流动,并且只能够在同一电脑上的各个进程之间流动。

命名管道(Named Pipes)

双向,跨网络,任何进程都可以轻易的抓住,放进管道的数据有固定的格式,而使用ReadFile()只能读取该大小的倍数。

可以被使用于I/O Completion Ports

邮槽:单向进程间通信,只允许从客户端发送到服务器,没有可靠性保证,根据广播通信体系所设计,使用邮槽可以建立不可靠的单向数据传输。其优点就是可以很方便的向一个或者多个服务器广播消息。

邮 槽是围绕Windows文件系统接口设计出来的。客户机和服务器应用需要使用标准的Win32文件系统I/O(输入/输出)函数,比如ReadFile和 WriteFile等等,以便在邮槽上收发数据,同时利用Win32文件系统的命名规则。邮槽必须依赖Windows重定向器,通过一个“邮槽文件系统” (Mailslot File System, MSFS),来创建及标识邮槽。

socket 

应用层通过传输 层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口 传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。 

区 分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是 “插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通 信,实现数据传输的并发服务。

继续阅读