管道和套接字有什么区别?

新手上路,请多包涵

两者都可以用于不同进程之间的通信,

有什么不同?

原文由 wamp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 774
2 个回答

Windows 有两种管道:匿名管道和命名管道。匿名管道(相当)对应于 Unix 管道——典型的用法是父进程将它们设置为由子进程继承,通常连接到子进程的标准输入、输出和/或错误流。曾经,匿名管道的实现方式与命名管道完全不同,因此它们(例如)不支持重叠 I/O。从那以后,情况发生了变化,因此匿名管道基本上只是一个名称不知道的命名管道,因此您无法通过名称打开它,但它仍然具有命名管道的所有其他功能(例如前面提到的重叠 I/O 能力)。

Windows 命名管道更像是套接字。它们起源于 OS/2,它们最初是创建客户端/服务器应用程序的主要机制。它们最初是围绕 NetBIOS 构建的(即,使用 NetBIOS 进行寻址和传输)。它们与 Windows 身份验证等功能紧密集成,因此您可以(例如)让命名管道服务器模拟客户端,以限制服务器执行客户端直接登录时可以执行的操作。最近,MS 在摆脱对 NetBIOS 的依赖方面遇到了一些麻烦,但即使他们现在可以使用 IP 作为传输(以及用于寻址的 DNS,IIRC),它们仍然主要用于 Windows 机器。在其他机器上的主要用途是模仿 Windows,例如运行 Samba。

原文由 Jerry Coffin 发布,翻译遵循 CC BY-SA 2.5 许可协议

(无耻地抄袭自 http://www.perlmonks.org/?node_id=180842

管道快速且可靠,因为它们是在单个主机上的内存中实现的,两个通信进程都在该主机上运行。套接字速度较慢且可靠性较低,但更灵活,因为它们允许不同主机上的进程之间进行通信。

原文由 Will A 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题