套接字类比:管道还是两个管道?

时间:2016-11-09 18:48:49

标签: python sockets

对于描述两个INET套接字之间的通信通道,这是更好的类比:

  • 一个双向“管道”
  • 两个单向“管道”

如果我向双向“管道”发送东西,然后立即尝试从那里收到东西,我希望能够收回我刚发送的东西(除非另一端设法在此同时消耗它)。

如果有两个单向管道,一个用于发送,另一个用于接收(反之亦然,另一端),那么我希望一端写入不会影响同一端的读取。

我是套接字的新手,在阅读了Python Socket HOWTO后,我无法分辨出使用的是哪种型号。我试图通过实验来推断它,但我不确定我是否正确设置了它。

那么,一端发送会影响到同一端的接收,还是将这些方向分开,好像有两个“管道”?

2 个答案:

答案 0 :(得分:1)

  

如果我要向双向管道发送东西"然后马上尝试从那里接收一些东西,我希望得到我刚发送的东西(除非另一端设法同时使用它)。

简短的回答是:不,这不是python套接字的工作原理。

要对此进行测试,请尝试以下代码段

server.py

#!/usr/bin/python

from socket import *
import time

if __name__ == '__main__':
    s = socket(AF_INET, SOCK_STREAM)
    s.bind(('localhost', 5000))
    s.listen(1)
    conn,addr = s.accept()
    print conn,addr
    time.sleep(2)
    print "Unceremoniously closing the connection"

client.py

#!/usr/bin/python

from socket import *

if __name__ == '__main__':
    s = socket(AF_INET, SOCK_STREAM)
    s.connect(('localhost',5000))

    s.send('hello!!')

    data = s.recv(1024)

    print data

运行

python server.py

然后

python client.py

客户端不会收到任何数据,并会在等待接收数据时抛出异常。

(这是for python 2.7 btw)

答案 1 :(得分:1)

套接字就像两个单向管道。你不会读回你写的数据。您只能获得另一方写的数据。