C#和Python之间的命名管道

发布于 2021-01-29 17:45:31

我正在尝试在两个程序之间创建双向通信通道(一个在Python中,另一个在C#中)

当我在两个C#程序或两个Python程序之间创建一个命名管道时,一切都很好,但是当我尝试(例如)从Python代码连接到C#服务器时,它不起作用:

C#代码:

NamedPipeServerStream server = new NamedPipeServerStream(
    "Demo", PipeDirection.InOut, 100, PipeTransmissionMode.Byte,
    PipeOptions.None, 4096, 4096)

如果我win32pipe在Python中使用代码块ConnectNamedPipe(永远不会返回)

p = win32pipe.CreateNamedPipe(
    r'\\.\pipe\Demo',
    win32pipe.PIPE_ACCESS_DUPLEX,
    win32pipe.PIPE_TYPE_BYTE | win32pipe.PIPE_WAIT,
    1, 65536, 65536,
    300,
    None)
win32pipe.ConnectNamedPipe(p)

如果我使用open函数,它只会建立连接,但不会发生任何事情:

open( '\\\\.\\pipe\\Demo', 'r+b' )

现在,如果我关闭Python程序,C#服务器将仅从Python接收一个数据项,并且出现System.IO.IOException“管道损坏”的加薪消息

我做错什么了吗?

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    好,我解决了这个问题。我应该寻求缓冲区的位置0。

    我的Python代码:

        win32file.WriteFile(CLIENT_PIPE,"%d\r\n"%i ,None)
        win32file.FlushFileBuffers(CLIENT_PIPE)
        win32file.SetFilePointer(CLIENT_PIPE,0,win32file.FILE_BEGIN)
        i,s = win32file.ReadFile(CLIENT_PIPE,10,None)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看