Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 什么';管道和插座的区别是什么?_Networking_Tcp_Network Programming - Fatal编程技术网

Networking 什么';管道和插座的区别是什么?

Networking 什么';管道和插座的区别是什么?,networking,tcp,network-programming,Networking,Tcp,Network Programming,我找到了几个答案,但它们似乎特别与Windows机器有关。 所以我的问题是管道和插座之间有什么区别,以及何时/如何选择其中一个 管道和插座之间有什么区别,何时/如何选择一个 管道和套接字都处理字节流,但它们的处理方式不同 管道仅存在于特定主机内,它们指的是虚拟文件之间的缓冲,或连接该主机内进程的输出/输入。管道中没有包的概念 套接字使用IPv4或IPv6打包通信;这种通信可以扩展到本地主机之外。请注意,套接字的不同端点可以共享相同的IP地址;但是,它们必须在不同的TCP/UDP端口上侦听才能执

我找到了几个答案,但它们似乎特别与Windows机器有关。 所以我的问题是管道和插座之间有什么区别,以及何时/如何选择其中一个

管道和插座之间有什么区别,何时/如何选择一个

管道和套接字都处理字节流,但它们的处理方式不同

  • 管道仅存在于特定主机内,它们指的是虚拟文件之间的缓冲,或连接该主机内进程的输出/输入。管道中没有包的概念
  • 套接字使用IPv4或IPv6打包通信;这种通信可以扩展到本地主机之外。请注意,套接字的不同端点可以共享相同的IP地址;但是,它们必须在不同的TCP/UDP端口上侦听才能执行此操作
用法:

  • 使用管道:
    • 当您希望在特定服务器中以文件形式读/写数据时。如果您使用的是C,则可以对管道执行
      read()
      write()
    • 如果要将一个进程的输出连接到另一个进程的输入。。。看
  • 使用套接字在不同的IPv4/IPv6端点之间发送数据。这种情况经常发生在不同主机之间,但套接字可以在同一主机内使用

顺便说一句,您可以使用或将套接字连接到管道。

要完成Mike给出的答案,重要的是要提到UNIX域套接字的存在,它可以在任何兼容POSIX的操作系统上使用。尽管在使用语义方面与“普通”internet套接字非常相似,但它们对于机器来说是纯本地的(当然,internet套接字也可以在本地工作),因此几乎像管道一样工作。几乎是这样,因为UNIX管道根据定义是单向的:

管道和FIFO(也称为命名管道)提供单向 进程间通信通道。管道有读端和写端 结束。写入管道写入端的数据可以从读取端读取 管的末端。(摘自)

UNIX域套接字还有一个非常不寻常的特性,因为除了数据之外,它们还允许发送文件描述符:通过这种方式,非特权进程可以访问其描述符已通过套接字发送的任何文件。据维基百科称,ClamAV防病毒扫描守护进程使用这种技术