对于描述两个INET套接字之间的通信通道,这是更好的类比:
如果我向双向“管道”发送东西,然后立即尝试从那里收到东西,我希望能够收回我刚发送的东西(除非另一端设法在此同时消耗它)。
如果有两个单向管道,一个用于发送,另一个用于接收(反之亦然,另一端),那么我希望一端写入不会影响同一端的读取。
我是套接字的新手,在阅读了Python Socket HOWTO后,我无法分辨出使用的是哪种型号。我试图通过实验来推断它,但我不确定我是否正确设置了它。
那么,一端发送会影响到同一端的接收,还是将这些方向分开,好像有两个“管道”?
答案 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)
套接字就像两个单向管道。你不会读回你写的数据。您只能获得另一方写的数据。