我正在尝试在C可执行文件和python脚本之间建立通信管道。 下面是Python脚本,关于这一点的奇怪之处如下。如果我跑 如下所示的python脚本,然后C可执行文件永远不会看到套接字上的任何数据。
但是,如果我取消注释Reader类(即,只启用了写入套接字) 那么C可执行的ALWAYS接收套接字上的数据。有没有人解释为什么当Reader和Writer线程同时运行时这不起作用?
class Reader(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
def run(self):
while True:
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/tmp/demo_socket")
nonce = s.recv(4)
s.close
if len(nonce) == 4:
print("Result received \n")
class Writer(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
while True:
payload = "Hello World"
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/tmp/demo_socket")
s.send(payload)
s.close()
reader = Reader()
writer = Writer()
reader.start()
writer.start()
try:
while True:
sleep(10000)
except KeyboardInterrupt:
print("Terminated")
编辑:
正如我所建议的那样,我试图在全局范围内打开连接,但这给了我另外两个问题:
1)发送数据后,在Python端只接收4个字节,但似乎我收到了无穷无尽的数据流......
2)我可以在哪里关闭这个全局开放的流?
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/tmp/demo_socket")
class Reader(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
def run(self):
while True:
nonce = s.recv(4)
if len(nonce) == 4:
print("Result received \n")
class Writer(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
while True:
payload = "Hello World"
s.send(payload)
reader = Reader()
writer = Writer()
reader.start()
writer.start()
try:
while True:
sleep(10000)
except KeyboardInterrupt:
print("Terminated")
答案 0 :(得分:0)
1)发送数据后,在Python端只接收4个字节,但似乎我收到了无穷无尽的数据流......
您的发件人继续发送,如果您收到的数据是对此的回复,则服务器会继续回复。
2)我可以在哪里关闭这个全局开放的流?
在您不再需要它之后......您是否有停止状态或类似情况?