对于Windows命名管道,使用CreateNamedPipe
、ConnectNamedPipe
、DisconnectNamedPipe
和{
我正在制作一个服务器应用程序,它连接到一个客户端应用程序,它在一个会话中多次连接和断开与管道的连接。在
当我的写操作因为客户机断开连接而失败时,我应该调用DisconnectNamedPipe
,CloseHandle
,还是不调用我的句柄。在
那么,要接受一个新的连接,我应该先调用CreateNamedPipe
,然后再调用ConnectNamedPipe
,还是仅仅调用ConnectNamedPipe
?在
我非常想解释一下,由于这些调用,我的管道可能处于不同的状态,因为我在其他地方找不到这个。在
附加信息:
语言:使用win32pipe
、win32file
和win32api
库的Python。在
管道设置:等待,无重叠,bytestream。在
最好先调用
DisconnectNamedPipe
,然后再调用CloseHandle
,尽管CloseHandle
应该清理所有内容。在MSDN文档有点模糊,它们的server example非常基本。至于是否重用管道句柄,这似乎是你自己的选择。Documentationfor
DisconnectNamedPipe
似乎表示可以在断开连接后再次调用该句柄上的ConnectNamedPipe
,从而为新客户机重用管道句柄。ConnectNamedPipe
的作用似乎是将一个连接客户机分配给一个句柄。在请确保您正在清理管道,尽管MSDN声明the following
如果您要创建/销毁大量管道,我也会记住上述内容。我想,如果有很多客户机,并且对池有一些增长/收缩机制,那么最好操作管道句柄池。在
我成功地实现了我想要的。我每次会话只调用一次
CreateNamedPipe
和CloseHandle
,当写入失败时,我调用DisconnectNamedPipe
,然后是另一个ConnectNamedPipe
。在技巧是只在管道实际连接时调用
DisconnectNamedPipe
。每次我试着连接“只是为了确定”时,我都会打电话给它,但它给了我奇怪的错误。在有关管道的更多信息,请参见djgandy的答案。在
相关问题 更多 >
编程相关推荐